Voltar ao catálogo
Season 36 5 Episódios 19 min 2026

Matplotlib

v3.10 — Edição de 2026. Um curso em áudio abrangente sobre o Matplotlib, a biblioteca de visualização mais popular do Python. Aprenda a identidade central, o ciclo de vida de um gráfico, layouts avançados, tipos de gráficos e fluxos de trabalho para utilizadores avançados na versão 3.10.

Visualização de Dados Ciência de Dados
Matplotlib
A Reproduzir
Click play to start
0:00
0:00
1
A Identidade Central: Figures, Axes e Interfaces
Bem-vindo ao Matplotlib. Neste episódio, definimos o modelo mental no centro da biblioteca de visualização mais popular do Python. Aprenda a diferença entre uma Figure e um Axes, e por que motivo a interface explícita Object-Oriented é a sua melhor ferramenta.
3m 39s
2
O Ciclo de Vida de um Gráfico
Descubra como levar um gráfico desde os dados em bruto até a uma apresentação formatada e com etiquetas. Percorremos o ciclo de vida de um gráfico simples, mostrando-lhe exatamente como adicionar etiquetas, títulos e tick formatters personalizados usando a interface explícita.
3m 21s
3
Dominar Layouts: Subplots e Mosaicos
Aprenda a gerir múltiplos gráficos numa única tela (canvas) sem que se sobreponham. Este episódio aborda o plt.subplots, o poder do subplot_mosaic para layouts semânticos e a utilização do constrained layout para manter tudo organizado.
4m 04s
4
Para Além da Linha: Explorar os Principais Tipos de Gráficos
Vá além das linhas básicas e dos scatter plots. Mapeamos as categorias de gráficos do Matplotlib, contrastando gráficos de distribuição estatística com funções de dados em grelha como imshow e pcolormesh.
3m 50s
5
Fluxos de Trabalho para Utilizadores Avançados: Estilos e rcParams
Transforme o aspeto dos seus gráficos instantaneamente. No nosso último episódio, exploramos como usar style sheets predefinidas e personalizar dinamicamente as definições globais usando rcParams.
4m 12s

Episódios

1

A Identidade Central: Figures, Axes e Interfaces

3m 39s

Bem-vindo ao Matplotlib. Neste episódio, definimos o modelo mental no centro da biblioteca de visualização mais popular do Python. Aprenda a diferença entre uma Figure e um Axes, e por que motivo a interface explícita Object-Oriented é a sua melhor ferramenta.

Download
Olá, daqui fala o Alex do DEV STORIES DOT EU. Matplotlib, episódio 1 de 5. Copias uma solução de plotting do Stack Overflow, colas no teu código e, de repente, o teu novo gráfico está a sobrepor o antigo. O código parece estar certo, mas comporta-se como um monstro de Frankenstein. Isto acontece porque a maioria dos exemplos online mistura duas formas completamente diferentes de usar a library sem explicar o porquê. Para resolver isto, precisas de perceber a identidade central: Figures, Axes e Interfaces. O Matplotlib é a base da visualização em Python. Pandas, Seaborn e muitas outras libraries correm por cima dele. Mas os developers muitas vezes tropeçam na sua arquitetura. Para escreveres código de visualização limpo, tens de separar o container do conteúdo. No Matplotlib, isto significa perceber a diferença entre uma Figure e um Axes. A Figure é o teu canvas. É o container de topo que guarda a janela inteira, o background e todos os elementos lá dentro. Mas uma Figure não desenha dados. Para isso, precisas de um Axes. O Axes é o plot propriamente dito. É a região onde as tuas linhas, barras e scatter points vivem. Uma Figure pode conter múltiplos Axes, como uma grelha de quatro subplots. Tem em atenção que Axes não é o plural da palavra axis. Um objeto Axes contém dois ou três objetos Axis individuais, que gerem as linhas numéricas e os ticks específicos. Tu associas dados ao Axes, e o Axes está associado à Figure. Assim que perceberes o que são estes objetos, tens de decidir como interagir com eles. É aqui que a confusão começa. O Matplotlib dá-te duas formas distintas de construir um gráfico: a interface implícita e a interface explícita. A interface implícita depende de um módulo chamado pyplot. Ele monitoriza o state do teu programa nos bastidores. Quando chamas uma função de plotting diretamente, o Matplotlib assume que queres desenhar na Figure e no Axes atualmente ativos. Se não existirem, ele cria-os para ti. Isto é muito conveniente para um script rápido e descartável, onde só precisas de inspecionar alguns dados rapidamente. Mas, como depende de um global state oculto, torna-se imprevisível em aplicações maiores. A interface explícita, muitas vezes chamada de interface orientada a objetos, elimina as suposições. Instancias os teus objetos logo à partida. Primeiro crias a Figure e o Axes juntos, e depois chamas métodos diretamente nesses objetos específicos. Nunca dependes da library para adivinhar qual é o plot que estás a usar como alvo. Se estiveres a construir um dashboard reutilizável, usa sempre a interface explícita. Podes escrever helper functions que recebem um objeto Axes como argumento, fazem o plot dos dados nele e retornam-no. A função não quer saber do global state da aplicação. Apenas modifica o objeto que lhe foi passado. Isto torna o teu código modular e testável. Aqui está a ideia principal. Podes usar qualquer um dos métodos, mas nunca os deves misturar. Usa a interface implícita do pyplot para exploração rápida num notebook, e usa a interface explícita orientada a objetos para código de produção. Se gostas do programa e nos queres apoiar, podes encontrar-nos pesquisando por DevStoriesEU no Patreon. Por este episódio é tudo. Obrigado por ouvires, e continua a construir!
2

O Ciclo de Vida de um Gráfico

3m 21s

Descubra como levar um gráfico desde os dados em bruto até a uma apresentação formatada e com etiquetas. Percorremos o ciclo de vida de um gráfico simples, mostrando-lhe exatamente como adicionar etiquetas, títulos e tick formatters personalizados usando a interface explícita.

Download
Olá, daqui fala o Alex da DEV STORIES DOT EU. Matplotlib, episódio 2 de 5. Formatar números num axis pode parecer uma luta. Queres uns cem K limpinhos com um cifrão, mas acabas com notação científica ou raw integers a ocupar o ecrã todo. A solução é incrivelmente simples quando aprendes a passar o controlo do teu axis directamente para uma função standard de Python. Hoje, vamos analisar o ciclo de vida de um plot usando a interface explícita de axes. A interface explícita trata a criação de charts como um processo previsível, passo a passo. Estás sempre a chamar métodos num objecto específico. O ciclo de vida começa com a criação de uma figure e de um objecto axes. A figure é o canvas em branco. O objecto axes representa a área real onde os teus dados vão viver. Assim que tens esse objecto axes, qualquer personalização é apenas mais uma method call aplicada a ele. Considera um cenário em que tens uma lista de nomes de empresas e uma lista dos seus valores de receita. Para colocar estes dados no ecrã, chamas um plotting method no axes. Para um bar chart horizontal, chamas bar h e passas os nomes e a receita. Nesta fase, tens um plot funcional, mas falta-lhe contexto. A próxima fase do ciclo de vida é adicionar esse contexto. Uma abordagem comum é definir o title, o x label e o y label individualmente. No entanto, o objecto axes tem um método set unificado. Podes chamar set e passar keyword arguments para o title, o x label e o y label de uma só vez. Esta única linha de código lida com o texto estrutural do teu chart. Se alguma vez precisares de inspeccionar o que está aplicado actualmente, podes usar os métodos get correspondentes, como get x tick labels, para obter o estado actual antes de o alterares. Isto leva-nos à parte mais crítica do fine-tuning: formatar os números do axis. Quando fazes o plot da receita, números grandes criam axes confusos. O Matplotlib pode mostrar cem mil com todos os seus zeros. Tu queres que diga cem K com um cifrão. Aqui está a ideia principal. Não precisas de vasculhar configurações obscuras do Matplotlib para corrigir isto. Basta escreveres uma função Python simples. Defines uma função que recebe dois argumentos: o tick value e a sua posição. Dentro desta função, escreves lógica standard de Python. Verificas se o valor está nos milhares, divides por mil e devolves uma string formatada com um cifrão e um K maiúsculo. Para aplicar isto, dizes ao objecto axes para usar a tua função para as suas tick marks. Acedes à propriedade x-axis no teu objecto axes e, depois, chamas um método chamado set major formatter. Passas a tua função personalizada directamente para este método. O Matplotlib assume o controlo a partir daí. Ao desenhar o plot, ele passa cada tick value do x-axis pela tua função Python e mostra a string limpa que devolveste. A interface explícita elimina as suposições na personalização de charts, dividindo o processo numa sequência fiável: crias o axes, mapeias a raw data, aplicas as tuas labels através de um único método set e interceptas o tick formatting completamente com a tua própria lógica. É tudo por este episódio. Obrigado por ouvires e continua a construir!
3

Dominar Layouts: Subplots e Mosaicos

4m 04s

Aprenda a gerir múltiplos gráficos numa única tela (canvas) sem que se sobreponham. Este episódio aborda o plt.subplots, o poder do subplot_mosaic para layouts semânticos e a utilização do constrained layout para manter tudo organizado.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. Matplotlib, episódio três de cinco. Precisas de construir um dashboard com um gráfico largo no cabeçalho e dois gráficos mais pequenos por baixo. No passado, isto significava calcular frações da grid e posicionar os axes manualmente. Agora, podes construir exatamente esse layout ao escrever uma string de arte ASCII. Isto é Mastering Layouts: Subplots and Mosaics. A maioria das visualizações de dados começa com uma grid básica. Quando precisas de um layout dois por dois, chamas a função standard subplots, especificas o número de linhas e colunas, e o Matplotlib devolve-te um objeto figure e um array multidimensional que contém os teus axes individuais. Usas o indexing standard de arrays para selecionar um axis específico e desenhar os teus dados. Isso funciona perfeitamente até adicionares texto. Por default, o Matplotlib posiciona os axes com base em proporções fixas do tamanho da figure. Ele não tem em conta o espaço físico ocupado pelos teus títulos, labels dos axes ou tick marks. Como resultado, as labels do axis X da tua linha superior vão muitas vezes sobrepor-se aos títulos da tua linha inferior. Em vez de escreveres ajustes de espaçamento custom, deves tratar disso na fase de criação da figure. Passa o argumento layout definido com a palavra constrained. O constrained layout é um motor de otimização. Mesmo antes da figure ser desenhada, ele mede as bounding boxes de todos os teus elementos de texto e afasta os axes o suficiente para evitar colisões. Os subplots standard e os constrained layouts cobrem grids simétricas. Mas os dashboards raramente são simétricos. Muitas vezes precisas de gráficos que ocupem várias linhas ou colunas. Isto leva-nos de volta ao gráfico largo no cabeçalho que ocupa a linha superior, com dois gráficos mais pequenos lado a lado por baixo. Em vez de lidares com objetos de especificação de grid de baixo nível, podes usar um método semântico chamado subplot mosaic. Chamas o subplot mosaic diretamente no teu objeto figure. Ele aceita uma representação visual do teu layout, escrita inteiramente em strings. Cada caractere único que escreves representa um gráfico discreto. Se um caractere for repetido ao longo de linhas ou colunas, esse gráfico estica-se para preencher esses espaços. Para construir o layout do nosso dashboard, podes passar uma única string onde as linhas são separadas por ponto e vírgula. Para a linha superior, escreves a letra A maiúscula duas vezes. Depois, um ponto e vírgula. Para a linha inferior, escreves a letra B maiúscula, e depois a letra C maiúscula. A string inteira é simplesmente A A ponto e vírgula B C. O Matplotlib faz o parse desta string e vê que o A ocupa duas colunas na primeira linha, por isso cria um axis largo a ocupar o topo. Vê que o B e o C ocupam uma coluna cada na segunda linha, por isso cria dois axes mais pequenos por baixo. Aqui está o ponto chave. Como os arrays standard perdem o significado em layouts complexos, o subplot mosaic não devolve um array. Devolve um dicionário Python standard. As keys deste dicionário são exatamente os caracteres da string que mapeaste no teu design. Se quiseres desenhar um line chart no teu cabeçalho largo, acedes simplesmente ao dicionário usando a key A. Se quiseres pôr um scatter plot no canto inferior direito, acedes ao dicionário usando a key C. O teu código de plotting fica completamente decoupled das coordenadas da grid. Também podes usar este sistema para criar white space intencional. Se quiseres um espaço vazio na tua grid, pões um caractere de ponto na tua string de layout. O Matplotlib lê o ponto e deixa essa célula específica da grid completamente em branco. A matemática complexa de grids é coisa do passado. O design de layouts moderno é apenas escrever a forma visual que queres e deixar o dicionário mapear os teus dados para o espaço exato no ecrã. É tudo por este episódio. Obrigado por ouvires, e continua a construir!
4

Para Além da Linha: Explorar os Principais Tipos de Gráficos

3m 50s

Vá além das linhas básicas e dos scatter plots. Mapeamos as categorias de gráficos do Matplotlib, contrastando gráficos de distribuição estatística com funções de dados em grelha como imshow e pcolormesh.

Download
Olá, daqui é o Alex da DEV STORIES DOT EU. Matplotlib, episódio 4 de 5. Tens dez mil data points, atiras tudo para um scatter plot, e acabas com uma enorme mancha de tinta ilegível, onde os pontos sobrepostos escondem o verdadeiro padrão. Escolheste uma ferramenta pairwise para um problema de densidade. Para ires além do line chart default, precisas de saber como combinar o formato dos teus dados com a ferramenta visual certa, que é exatamente o que abordamos em Além da Linha: Explorar os Tipos Principais de Plots. O Matplotlib organiza os seus plots principais em categorias amplas com base na estrutura dos teus dados. As três categorias fundamentais são dados pairwise, distribuições estatísticas e dados em grid. O formato mais básico é o pairwise. Tens um array de valores X e um array correspondente de valores Y. Usas a função plot quando estes pontos têm uma sequência lógica, como uma time series, onde desenhar uma linha contínua entre eles mostra uma tendência. Se os pontos forem observações independentes, usas a função scatter para colocar marcadores individuais. Mas os scatter plots falham quando tens muita densidade. Isso leva-nos à segunda categoria, que lida com distribuições estatísticas. A ideia principal é esta. Quando tens dez mil pontos sobrepostos, não queres saber da coordenada exata do ponto número quatro mil. Queres saber onde os pontos formam clusters. É aqui que uma função como hexbin entra em ação. Ela recebe os mesmos arrays X e Y de um scatter plot, mas agrupa a área geométrica em bins hexagonais, colorindo-os com base na densidade de pontos para revelar o padrão oculto. Agora, considera um único array com as idades raw de todos os teus clientes. Fazer o plot delas uma a uma como pontos dá-te apenas ruído inútil. Em vez disso, passas essa flat list única para a função hist. Um histograma agrupa automaticamente as idades individuais em intervalos e mostra-te o volume de clientes na casa dos vinte anos em comparação com os da casa dos cinquenta. Se precisares de comparar essas distribuições de idades em cinco lojas diferentes lado a lado, mudas para um boxplot. O boxplot resume os intervalos, as medianas e os outliers de forma clara. Se precisares de mais detalhe do que um boxplot oferece, um violinplot desenha a forma curva completa do perfil de densidade para cada loja. A terceira categoria principal são os dados em grid. Isto aplica-se quando os teus dados são uma matriz bidimensional e precisas de visualizar um valor contínuo numa área. Pensa num mapa de temperatura bidimensional numa grid geográfica. Cada posição tem uma coordenada X, uma coordenada Y e um valor de temperatura. Não queres linhas ou pontos dispersos para representar isto. Queres uma superfície sólida e colorida. O Matplotlib fornece o imshow e o pcolormesh para este fim. Usas o imshow quando os teus dados estão numa grid perfeitamente regular, como os píxeis de uma fotografia digital. Ele assume um espaçamento igual entre cada data point e renderiza muito rapidamente. Se as coordenadas da tua grid forem irregulares, talvez os teus limites de medição se deformem ou comprimam perto de certas características geográficas, usas o pcolormesh. Ele calcula e desenha quadriláteros individuais para cada célula, conformando-se exatamente à forma distorcida dos teus arrays de coordenadas. Ao decidires que função do Matplotlib chamar, ignora a aparência que queres que a imagem final tenha e olha estritamente para o formato matemático dos teus arrays de input: são pares sequenciais, flat lists ou matrizes bidimensionais. É tudo por este episódio. Obrigado por ouvires, e continua a criar!
5

Fluxos de Trabalho para Utilizadores Avançados: Estilos e rcParams

4m 12s

Transforme o aspeto dos seus gráficos instantaneamente. No nosso último episódio, exploramos como usar style sheets predefinidas e personalizar dinamicamente as definições globais usando rcParams.

Download
Olá, daqui é o Alex do DEV STORIES DOT EU. Matplotlib, episódio 5 de 5. Vês muitas vezes pessoas a escrever vinte linhas de código repetitivo, a ajustar tick labels, grid lines e fonts para cada plot que fazem. Um único comando pode aplicar todas essas alterações instantaneamente em todo o projeto. Este episódio aborda workflows de power-user: styles e rcParams. O look standard do Matplotlib é altamente reconhecível, mas atualizar manualmente elementos individuais por plot para corresponder a uma estética específica é ineficiente. Em vez disso, usas style sheets. O Matplotlib já vem com vários built-in styles. Chamas uma função chamada style dot use do módulo pyplot e passas uma string, como ggplot ou classic. Se estiveres a preparar uma visualização para um slide de apresentação com dark theme, não precisas de alterar manualmente o background para preto, os eixos para branco e o texto para cinzento claro. Corres style dot use com dark underscore background no topo do teu script. Cada figure gerada após essa linha herda instantaneamente esse look específico. Podes até combinar style sheets. Se passares uma lista de nomes de styles, o Matplotlib aplica-os por ordem, da esquerda para a direita. Os styles listados à direita vão fazer overwrite às settings sobrepostas dos styles à esquerda. Aqui está o insight principal. Chamar style dot use altera o global state para o resto da tua sessão de Python. Se quiseres um style específico apenas para um chart em particular, usas um context manager chamado style dot context. Abres o context, especificas o nome do style e escreves o teu código de plotting dentro desse block. Assim que o block termina, os teus plots revertem para o global style que estava ativo antes. Por trás destas style sheets, existe um dicionário de configuração enorme chamado rcParams. O r e o c significam runtime configuration. Todas as default properties que o Matplotlib usa para fazer render de uma figure vivem neste dicionário. Font sizes, line widths, dimensões default da figure e marker styles estão todos mapeados para string keys específicas. Quando aplicas uma style sheet, estás essencialmente a fazer um bulk-update ao dicionário rcParams em background. Mas também podes interagir diretamente com ele para fazer ajustes granulares e dinâmicos. Imagina que aplicaste um style de que gostas, mas a line width default é demasiado fina para as tuas necessidades. Acedes ao dicionário rcParams, especificas a key para lines dot linewidth, e atribuis-lhe um novo valor numérico. A partir desse momento, todas as linhas desenhadas na tua sessão assumem por default essa width mais grossa. O Matplotlib também fornece uma convenience function chamada rc para lidar com isto. Em vez de modificares o dicionário key a key, chamas rc, passas um top-level group name como font, e depois forneces keyword arguments para as properties específicas, como weight ou size. É uma forma muito mais clean de atualizar várias settings relacionadas de uma só vez. Também podes definir os teus próprios custom styles. Uma style sheet é simplesmente um ficheiro de texto com uma extensão dot mplstyle. Lá dentro, contém uma lista simples de key-value pairs do rcParams. Guardas este ficheiro, passas o seu path para style dot use, e o teu custom corporate branding é instantaneamente aplicado a qualquer plot sem poluir o teu código de dados real. O verdadeiro poder da customização do Matplotlib é fazer o decoupling da tua data logic das tuas escolhas estéticas. Definir regras globalmente mantém as tuas plotting functions lean e garante consistência visual em toda a tua codebase. Encorajo-te a explorar a documentação oficial para veres a lista completa de runtime configurations disponíveis e tentares construir uma custom style sheet tu mesmo, ou visita devstories dot eu para sugerires tópicos para futuras séries. Obrigado por passares uns minutos comigo. Até à próxima, fica bem.