Matplotlib Cheat Sheet: Folha de Consulta
Última atualização
Figure e axes
A figure é a imagem inteira. Um axes é um gráfico dentro dela, e quase todas as chamadas abaixo são métodos de ax.
| Tarefa | Código |
|---|---|
| Importar o pyplot | import matplotlib.pyplot as plt |
| Uma figure com um gráfico | fig, ax = plt.subplots() |
| Definir o tamanho em polegadas | fig, ax = plt.subplots(figsize=(8, 4)) |
| Desenhar no axes | ax.plot(x, y) |
| Mostrar a figure | plt.show() |
| Salvar como PNG nítido | fig.savefig("chart.png", dpi=150, bbox_inches="tight") |
| Salvar como gráfico vetorial | fig.savefig("chart.svg"), fig.savefig("chart.pdf") |
| Fundo transparente | fig.savefig("chart.png", transparent=True) |
| Fechar a figure para liberar memória | plt.close(fig) |
| Estilo pyplot rápido para um gráfico | plt.plot(x, y)
plt.title("Quick look")
plt.show() |
Tipos de gráfico
| Tarefa | Código |
|---|---|
| Gráfico de linha | ax.plot(x, y) |
| Gráfico de dispersão | ax.scatter(x, y, s=20, alpha=0.7) |
| Dispersão colorida por valor, com barra de cores | points = ax.scatter(x, y, c=y, cmap="viridis")
fig.colorbar(points, ax=ax) |
| Gráfico de barras | ax.bar(cats, a) |
| Barras horizontais | ax.barh(cats, a) |
| Barras empilhadas | ax.bar(cats, a, label="2025")
ax.bar(cats, b, bottom=a, label="2026") |
| Barras agrupadas | pos = np.arange(len(cats))
ax.bar(pos - 0.2, a, width=0.4)
ax.bar(pos + 0.2, b, width=0.4)
ax.set_xticks(pos, labels=cats) |
| Histograma | ax.hist(data, bins=30) |
| Boxplot | ax.boxplot([data, data * 2], tick_labels=["A", "B"]) |
| Gráfico de violino | ax.violinplot([data, data * 2]) |
| Gráfico de pizza | ax.pie([40, 35, 25], labels=cats, autopct="%1.0f%%") |
| Faixa entre duas curvas | ax.fill_between(x, y - 0.2, y + 0.2, alpha=0.3) |
| Barras de erro | ax.errorbar([1, 2, 3], [4, 5, 3], yerr=[0.5, 0.3, 0.6], fmt="o", capsize=4) |
| Gráfico em degraus | ax.step(x, y, where="mid") |
| Mapa de calor de um array 2D | image = ax.imshow(np.random.default_rng(0).random((5, 5)), cmap="magma")
fig.colorbar(image, ax=ax) |
| Gráfico de contorno preenchido | X, Y = np.meshgrid(x, x)
ax.contourf(X, Y, np.sin(X) * np.cos(Y), levels=20) |
| Densidade de muitos pontos | ax.hexbin(data, data + np.random.default_rng(1).normal(size=200), gridsize=20) |
| Linha de referência horizontal ou vertical | ax.axhline(0, color="gray", linestyle="--"), ax.axvline(5) |
| Sombrear um intervalo | ax.axvspan(2, 4, alpha=0.2) |
Linhas, marcadores e cores
| Tarefa | Código |
|---|---|
| Cor, espessura e estilo da linha | ax.plot(x, y, color="tab:red", linewidth=2, linestyle="--") |
| Marcadores nos pontos | ax.plot(x, y, marker="o", markersize=4) |
| String de formato curta | ax.plot(x, y, "g--o") |
| Transparência | ax.plot(x, y, alpha=0.5) |
| Estilos de linha | "-", "--", "-.", ":" |
| Códigos de marcador | "o", "s", "^", "x", ".", "*" |
| Formas de nomear uma cor | "tab:blue", "C1", "#1f77b4", (0.2, 0.4, 0.6) |
| n cores de um colormap | colors = plt.colormaps["viridis"](np.linspace(0, 1, 5)) |
| Seu próprio ciclo de cores | ax.set_prop_cycle(color=["#0b7285", "#e8590c", "#5f3dc4"]) |
| Barras com contorno e hachura | ax.bar(cats, a, color="white", edgecolor="black", hatch="//") |
Títulos, rótulos e legendas
| Tarefa | Código |
|---|---|
| Título e rótulos dos eixos | ax.set_title("Sales"), ax.set_xlabel("Month"), ax.set_ylabel("EUR") |
| Tudo em uma chamada | ax.set(title="Sales", xlabel="Month", ylabel="EUR") |
| Legenda a partir dos rótulos das linhas | ax.plot(x, y, label="sin")
ax.legend() |
| Posição e colunas da legenda | ax.legend(loc="upper right", ncols=2, frameon=False) |
| Legenda fora do gráfico | ax.legend(loc="center left", bbox_to_anchor=(1, 0.5)) |
| Texto numa posição dos dados | ax.text(5, 0.5, "note") |
| Anotação com seta | ax.annotate("peak", xy=(1.57, 1), xytext=(3, 1.2), arrowprops=dict(arrowstyle="->")) |
| Valores nas barras | bars = ax.bar(cats, a)
ax.bar_label(bars) |
| Título da figure inteira | fig.suptitle("Q1 report") |
| Matemática nos rótulos | ax.set_xlabel(r"$\alpha$ (rad)") |
Eixos, ticks e escalas
| Tarefa | Código |
|---|---|
| Limites dos eixos | ax.set_xlim(0, 10), ax.set_ylim(bottom=0) |
| Escala logarítmica | ax.set_yscale("log") |
| Escolher ticks e seus rótulos | ax.set_xticks([0, 5, 10], labels=["start", "middle", "end"]) |
| Girar rótulos dos ticks | ax.tick_params(axis="x", labelrotation=45) |
| Linhas de grade | ax.grid(True, alpha=0.3) |
| Eixo em porcentagem | from matplotlib.ticker import PercentFormatter
ax.yaxis.set_major_formatter(PercentFormatter(1.0)) |
| Separador de milhar | ax.yaxis.set_major_formatter("{x:,.0f}") |
| Ocultar as bordas de cima e da direita | ax.spines[["top", "right"]].set_visible(False) |
| Segundo eixo y à direita | ax2 = ax.twinx()
ax2.plot(x, y * 100, color="tab:orange") |
| Mesma escala nos dois eixos | ax.set_aspect("equal") |
| Inverter um eixo | ax.invert_yaxis() |
| Ocultar os eixos por completo | ax.axis("off") |
| Rótulos de data legíveis | fig.autofmt_xdate() |
Subplots e layout
plt.subplots(rows, cols) devolve um array NumPy de axes. Indexe como um array.
| Tarefa | Código |
|---|---|
| Grade de gráficos | fig, axs = plt.subplots(2, 2, figsize=(8, 6)) |
| Desenhar em um deles | axs[0, 1].plot(x, y) |
| Percorrer todos | for ax in axs.flat:
ax.grid(True) |
| Compartilhar um eixo entre gráficos | fig, axs = plt.subplots(1, 3, sharey=True) |
| Espaçamento sem sobreposição | fig, axs = plt.subplots(2, 2, layout="constrained") |
| Corrigir sobreposições depois de desenhar | fig.tight_layout() |
| Colunas de larguras diferentes | fig, axs = plt.subplots(1, 2, width_ratios=[3, 1]) |
| Layout nomeado com painel largo | fig, axd = plt.subplot_mosaic([["top", "top"], ["left", "right"]])
axd["top"].plot(x, y) |
| Gráfico pequeno dentro de outro | inset = ax.inset_axes([0.6, 0.6, 0.35, 0.35]) |
| Ocultar um painel vazio | axs[0].axis("off") |
Estilos e padrões
| Tarefa | Código |
|---|---|
| Usar um estilo nativo | plt.style.use("ggplot") |
| Listar os estilos | plt.style.available |
| Visual do seaborn sem seaborn | plt.style.use("seaborn-v0_8-whitegrid") |
| Estilo só para uma figure | with plt.style.context("dark_background"):
fig, ax = plt.subplots() |
| Tamanho de fonte padrão | plt.rcParams["font.size"] = 12 |
| Tamanho e resolução padrão da figure | plt.rcParams["figure.figsize"] = (8, 4), plt.rcParams["figure.dpi"] = 120 |
| Voltar aos padrões | plt.style.use("default") |
| Colormaps comuns: sequencial, divergente, cinza | "viridis", "coolwarm", "Greys" |
Gráficos a partir do pandas
O pandas plota com Matplotlib. Passe ax= para desenhar no seu próprio axes, ou guarde o ax que o pandas devolve.
| Tarefa | Código |
|---|---|
| Colunas do DataFrame no seu axes | df.plot(x="month", y="sales", ax=ax) |
| Barras de um resumo por grupo | df.groupby("city")["sales"].sum().plot.bar(ax=ax) |
| Continuar estilizando o que o pandas desenhou | ax = df.plot(x="month", y="sales")
ax.set_title("Sales") |
| Colunas direto no Matplotlib | ax.plot(df["month"], df["sales"]) |
Matplotlib 3.11: formas antigas e o que escrever agora
Código copiado de tutoriais antigos pode falhar ou gerar avisos no Matplotlib 3.11. Use as formas da coluna Matplotlib 3.11.
| Tarefa | Matplotlib 3.11 | Forma antiga |
|---|---|---|
| Rótulos do boxplot | ax.boxplot([data, data * 2], tick_labels=["A", "B"]) | labels=["A", "B"] |
| Boxplot ou violino na horizontal | ax.boxplot(data, orientation="horizontal") | vert=False |
| Obter um colormap | plt.colormaps["viridis"] | plt.cm.get_cmap("viridis") |
| Estilo seaborn | plt.style.use("seaborn-v0_8") | plt.style.use("seaborn") |
O código Matplotlib que você precisa para transformar dados em um gráfico claro, organizado por tarefa: figure e axes, tipos de gráfico, linhas e cores, títulos e legendas, eixos e ticks, subplots e layout, estilos e gráficos a partir do pandas. Cada linha traz um trecho curto para colar e uma frase sobre o que ele faz.
Tudo aqui usa o estilo orientado a objetos (fig, ax = plt.subplots() e depois métodos em ax) e foi escrito para o Matplotlib 3.11, a versão que a Coddy roda. Formas antigas como labels= em boxplot aparecem só na última tabela, ao lado do que escrever no lugar. Os exemplos usam x = np.linspace(0, 10, 50), y = np.sin(x) e uma amostra de valores normais chamada data. Está começando em Python? Comece pela folha de consulta Python e deixe as folhas de consulta de pandas, NumPy e scikit-learn abertas ao lado desta.
Perguntas frequentes sobre a folha de consulta Matplotlib
Esta folha de consulta de Matplotlib é grátis?
Qual é a diferença entre plt e ax?
plt.plot() desenha no axes que estiver ativo no momento, o que é rápido para um único gráfico. fig, ax = plt.subplots() te dá a figure e o axes como objetos, então ax.plot() sempre desenha exatamente onde você quer. Use o estilo ax em tudo que tiver mais de um gráfico e no código que você vai manter.Como mudo o tamanho da figure?
figsize em polegadas ao criar a figure: fig, ax = plt.subplots(figsize=(10, 5)). Para mudar o padrão de todas as figures, defina plt.rcParams["figure.figsize"] = (10, 5). O tamanho em pixels de um arquivo salvo é figsize vezes dpi.Como salvo um gráfico em alta resolução?
fig.savefig("chart.png", dpi=300, bbox_inches="tight"). Um dpi maior gera um PNG mais nítido, e bbox_inches="tight" corta as margens vazias. Para impressão ou slides, salve em SVG ou PDF, que ficam nítidos em qualquer tamanho.Por que os títulos e rótulos dos meus subplots se sobrepõem?
layout="constrained", como em plt.subplots(2, 2, layout="constrained"), e o Matplotlib abre espaço para títulos, rótulos e barras de cores. Numa figure já existente, chame fig.tight_layout() depois de desenhar.Qual versão do Matplotlib esta folha de consulta cobre?
labels= em boxplot (agora tick_labels=) e plt.cm.get_cmap (agora plt.colormaps[...]), estão na última tabela, ao lado do que escrever no lugar.