Gráficos em que o Python supera o Rstudio

O Rstudio não pode ser bom em tudo. Veja três gráficos em que o Python é melhor
python
ggplot2
Autor

Aldani Braz Carvalho

Data de Publicação

17 de dezembro de 2024

Introdução

O Rstudio é fantástico e eu sou apaixonado pela forma intuitiva de utilizar a linguagem R. Mas há três gráficos em que o Python é melhor:

🍩 Donuts;

🌦️ Climograma;

🧭 Rosa dos ventos;

Donuts

O {ggplot} consegue fazer o gráfico donut, especialmente com o auxílio do ggforce. Mas mesmo assim o processo não é muito intuitivo.

O primeiro passo é importar o pacote matplotlib.

import matplotlib.pyplot as plt


Criando os dados:

rotulo = "Preto", "Azul", "Vermelho", "Branco-Transparente"
porcentagem = [60, 20, 10, 10]
cor = ["black", "#3498db", "red", "white"]  
explode = (0, 0, 0, 0) 
edgecolor = "black" 


Configure o gráfico:

# Tamanho da fonte
plt.rcParams["font.size"] = 11

# Gráfico:
plt.pie(
    porcentagem,
    explode=explode,
    labels=rotulo,
    colors=cor,
    autopct="%1.1f%%",
    shadow=False,
    wedgeprops=dict(width=0.5, 
                    edgecolor=edgecolor, 
                    alpha=0.8),
                    ); 

# Círculo no centro
centre_circle = plt.Circle((0, 0), 
                           0.75, 
                           color="black", 
                           fc="white", 
                           linewidth=1.25)
fig = plt.gcf()
fig.gca().add_artist(centre_circle)

# Raio do círculo
plt.axis("equal");

Climograma

Criar gráficos com eixos independentes, como um climograma, pode ser uma tarefa trabalhosa no R. Isso ocorre porque, no R, os eixos estão interligados e exigem ajustes manuais complexos para personalizações mais específicas. Em contrapartida, no Python, a abordagem é mais intuitiva. A biblioteca {matplotlib}, por exemplo, permite configurar cada eixo de forma independente, simplificando tanto a criação quanto a personalização.

Código
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# Crie um dataframe
df = pd.DataFrame({
    "Mês": ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
    "Temp_PVH": [26.1, 26.0, 26.1, 26.4, 26.2, 25.8, 27.0, 27.6, 28.2, 27.4, 26.9, 26.3],
    "Temp_Rebio": [25.5, 25.2, 25.4, 25.7, 25.6, 25.6, 26.0, 27.1, 27.6, 26.6, 26.1, 25.6],
    "Prec_PVH": [246.3, 298.8, 285.9, 160.0,  87.2,  10.8,  12.4,  32.5,  75.1, 134.2, 179.1, 233.7],
    "Prec_Rebio": [214.9, 200.9, 213.7, 117.9, 34.7, 9.0, 0.1, 5.9, 44.1, 165.2, 191.0, 323.1],
    "Umid_PVH": [82.6, 83.7, 84.1, 82.6, 80.7, 77.2, 65.2, 62.6, 68.7, 74.9, 78.9, 81.6],
    "Umid_Rebio": [88.3, 89.8, 89.8, 87.6, 83.5, 78.0, 65.3, 65.0, 69.6, 80.0, 84.9, 88.2]
})

# Crie um gráfico
fig, ax1 = plt.subplots(figsize=(6.2, 5))  # Cria uma figura maior e o eixo principal (eixo 1)
ax2 = ax1.twinx()  # Cria um segundo eixo (eixo 2) que compartilha o mesmo eixo x
ax3 = ax1.twinx()  # Cria um terceiro eixo (eixo 3) que compartilha o mesmo eixo x

# Afastar o eixo ax3 para evitar sobreposição
ax3.spines["right"].set_position(("outward", 60))

# Plote a precipitação no eixo 1 (barras)
width = 0.35
months = np.arange(len(df["Mês"]))
ax1.bar(months - width/2, df["Prec_PVH"], width=width, color="blue", alpha=0.5, label="Precipitação em Porto Velho")
ax1.bar(months + width/2, df["Prec_Rebio"], width=width, color="#1F77B4", alpha=0.5, label="Precipitação na Rebio Jaru")

# Plote a temperatura no eixo 2 (linhas)
ax2.plot(months, df["Temp_PVH"], color="red", linestyle=':', marker="v", label="Temperatura em Porto Velho")
ax2.plot(months, df["Temp_Rebio"], color="orange", linestyle=':', marker="v", label="Temperatura na Rebio Jaru")

# Plote a umidade no eixo 3 (linhas)
ax3.plot(months, df["Umid_PVH"], color="red", linestyle='solid', marker="D", markersize=4, label="Umidade em Porto Velho")
ax3.plot(months, df["Umid_Rebio"], color="orange", linestyle='solid', marker="D", markersize=4, label="Umidade na Rebio Jaru")

# Defina os limites dos eixos
ax1.set_ylim(0, 450);
ax2.set_ylim(25, 30);
ax3.set_ylim(0, 100);

# Defina os rótulos dos eixos
ax1.set_ylabel("Precipitação (mm)", color="black")
ax2.set_ylabel("Temperatura (°C)", color="black")
ax3.set_ylabel("Umidade Relativa (%)", color="black")

# Rótulos dos meses
plt.xticks(months, df["Mês"]);

# Adicione a legenda fora do gráfico
lines, labels = [], [] # Criação de listas para armazenar as linhas (handles) e os rótulos (labels) de cada gráfico
for ax in [ax1, ax2, ax3]: # Iteração através de cada eixo (ax1, ax2, ax3) para coletar as linhas e rótulos
    ax_line, ax_label = ax.get_legend_handles_labels()
    lines.extend(ax_line)
    labels.extend(ax_label)
    
# Adiciona a legenda à figura (fig) usando as linhas e rótulos coletados
fig.legend(lines, labels, loc='upper center', bbox_to_anchor=(0.5, 0.1), ncol=3) 

# Ajuste layout
plt.tight_layout(rect=[0, 0.1, 1, 1])  # Ajuste os limites da área do gráfico para dar espaço à legenda

# Exibe o gráfico
plt.show()


Código
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# Defina o nome dos arquivos Excel e as abas que deseja ler
arquivo_excel_PVH = "PVH_tratado_coletas_completo.xlsx"  # Nome do arquivo de dados para Porto Velho
arquivo_excel_Jaru = "Jaru_tratado_coletas_completo.xlsx"  # Nome do arquivo de dados para Rebio Jaru

# Carrega os arquivos Excel em DataFrames
df_PVH = pd.read_excel(arquivo_excel_PVH, sheet_name=0)  # Carrega os dados de Porto Velho
df_Jaru = pd.read_excel(arquivo_excel_Jaru, sheet_name=0)  # Carrega os dados de Rebio Jaru

# Converta a coluna 'data_character' para formato de data no padrão brasileiro (dd/mm/aaaa)
df_PVH['data_character'] = pd.to_datetime(df_PVH['data_character'], format='%d/%m/%Y')  # Formato de data para Porto Velho

# Criação da nova coluna 'data_character' para Jaru
# Concatena as colunas 'dia', 'mes' e 'ano' em uma string para formar a data
df_Jaru['data_character'] = df_Jaru['dia'].astype(str) + '/' + df_Jaru['mes'].astype(str) + '/' + df_Jaru['ano'].astype(str)
# Converte a string resultante em formato de data
df_Jaru['data_character'] = pd.to_datetime(df_Jaru['data_character'], format='%d/%m/%Y')  # Formato de data para Jaru

# Crie uma figura com dois subgráficos
fig, (ax2, ax1) = plt.subplots(nrows=2,  # Define que haverá 2 linhas de subgráficos
                               ncols=1,  # Define que haverá 1 coluna de subgráficos
                               figsize=(7, 5),  # Define o tamanho da figura: 7 polegadas de largura por 5 polegadas de altura
                               sharex=True)  # Os subgráficos devem compartilhar o mesmo eixo x.

# Gráfico para Jaru
ax2_twin = ax2.twinx()  # Cria um eixo secundário para a temperatura
ax2_twin2 = ax2.twinx()  # Cria um eixo terciário para a umidade
ax2_twin2.spines["right"].set_position(("outward", 45))  # Afasta o terceiro eixo da borda direita

# Plotar dados de Jaru
days_Jaru = np.arange(len(df_Jaru["data_character"]))  # Cria um array de dias baseado no número de entradas
# Cria um gráfico de barras para a precipitação
ax2.bar(days_Jaru, df_Jaru["chuva"], 
        width=0.35, 
        color="blue", 
        alpha=0.5, 
        edgecolor="black", 
        linewidth=0.5, 
        label="Precipitação (mm)")  # Adiciona etiqueta para a legenda

# Plota a temperatura no eixo secundário
ax2_twin.plot(days_Jaru, df_Jaru["temp"], 
              color="red", 
              alpha=0.7, 
              linestyle=':', 
              marker="v", 
              label="Temperatura (°C)")  # Adiciona etiqueta para a legenda

# Plota a umidade relativa no eixo terciário
ax2_twin2.plot(days_Jaru, df_Jaru["umid"], 
               color="blue", 
               alpha=0.5, 
               linestyle='solid', 
               marker="D", 
               markersize=4, 
               label="Umidade Relativa (%)")  # Adiciona etiqueta para a legenda

# Definições do eixo para Jaru
ax2.set_ylabel("Precipitação (mm)")  # Rótulo do eixo y
ax2_twin.set_ylabel("Temperatura (°C)")  # Rótulo do eixo y do segundo eixo
ax2_twin2.set_ylabel("Umidade Relativa (%)")  # Rótulo do eixo y do terceiro eixo
ax2.set_ylim(0, 30)   # Limites do eixo y para a precipitação (mm);
ax2_twin.set_ylim(15, 35)  # Limites do eixo y para a temperatura (°C);
ax2_twin2.set_ylim(40, 100)  # Limites do eixo y para a umidade relativa (%);

# Adiciona o título ao gráfico de Jaru
ax2.set_title("a) Rebio Jaru", 
              loc='left', # Alinhado à esquerda
              pad=10, # Afasta o texto de baixo
              x=-0.13)  # Título do gráfico alinhado à esquerda

### Gráfico para Porto Velho
ax1_twin = ax1.twinx()  # Cria um eixo secundário para a temperatura
ax1_twin2 = ax1.twinx()  # Cria um eixo terciário para a umidade
ax1_twin2.spines["right"].set_position(("outward", 45))  # Afasta o terceiro eixo da borda direita

# Plotar dados de Porto Velho
days_PVH = np.arange(len(df_PVH["data_character"]))  # Cria um array de dias baseado no número de entradas
# Cria um gráfico de barras para a precipitação
ax1.bar(days_PVH, df_PVH["chuva"], 
        width=0.35, 
        color="blue", 
        alpha=0.5, 
        edgecolor="black", 
        linewidth=0.5, 
        label="Precipitação (mm)")  # Adiciona etiqueta para a legenda

# Plota a temperatura no eixo secundário
ax1_twin.plot(days_PVH, df_PVH["temp"], 
              color="red", 
              alpha=0.7, 
              linestyle=':', 
              marker="v", 
              label="Temperatura (°C)")  # Adiciona etiqueta para a legenda

# Plota a umidade relativa no eixo terciário
ax1_twin2.plot(days_PVH, df_PVH["umid"], 
               color="blue", 
               alpha=0.5, 
               linestyle='solid', 
               marker="D", 
               markersize=4, 
               label="Umidade Relativa (%)")  # Adiciona etiqueta para a legenda

# Definições do eixo para Porto Velho
ax1.set_ylabel("Precipitação (mm)")  # Rótulo do eixo y
ax1_twin.set_ylabel("Temperatura (°C)")  # Rótulo do eixo y do segundo eixo
ax1_twin2.set_ylabel("Umidade Relativa (%)")  # Rótulo do eixo y do terceiro eixo
ax1.set_ylim(0, 30)   # Limites do eixo y para a precipitação (mm);
ax1_twin.set_ylim(15, 35)  # Limites do eixo y para a temperatura (°C);
ax1_twin2.set_ylim(40, 100)  # Limites do eixo y para a umidade relativa (%);

# Adiciona o título ao gráfico de Porto Velho
ax1.set_title("b) Porto Velho", 
              loc='left', # Alinhado à esquerda
              pad=10, # Afasta o texto de baixo
              x=-0.13)  # Título do gráfico alinhado à esquerda

# Configurar rótulos do eixo x
ax1.set_xticks(days_PVH)  # Define as posições das marcas no eixo x para Porto Velho
ax2.set_xticks(days_Jaru)  # Define as posições das marcas no eixo x para Jaru
# Define os rótulos das marcas do eixo x formatando as datas
ax1.set_xticklabels(df_PVH["data_character"].dt.strftime("%d/%m/%Y"), # Extrai e formata as datas da coluna 'data_character' para o formato 'dd/mm/aaaa'
                    rotation=45, # O ângulo de 45 graus 
                    ha='right')  # O ha é horizontal alignment = alinhamento à direita

ax2.set_xticklabels(df_Jaru["data_character"].dt.strftime("%d/%m/%Y"), # Extrai e formata as datas da coluna 'data_character' para o formato 'dd/mm/aaaa'
                    rotation=45, # O ângulo de 45 graus 
                    ha='right')  # O ha é horizontal alignment = alinhamento à direita; 

# Adicione a legenda apenas uma vez
lines, labels = ax1.get_legend_handles_labels()  # Obtém as linhas e rótulos da legenda do primeiro gráfico
lines2, labels2 = ax1_twin.get_legend_handles_labels()  # Obtém as linhas e rótulos do eixo secundário
lines3, labels3 = ax1_twin2.get_legend_handles_labels()  # Obtém as linhas e rótulos do eixo terciário
lines.extend(lines2)  # Adiciona as linhas do eixo secundário
lines.extend(lines3)  # Adiciona as linhas do eixo terciário

# Adicione as linhas e rótulos do gráfico de Jaru
lines4, labels4 = ax2.get_legend_handles_labels()  # Obtém as linhas e rótulos do segundo gráfico
lines.extend(lines4)  # Adiciona as linhas do gráfico de Jaru
lines5, labels5 = ax2_twin.get_legend_handles_labels()  # Obtém as linhas do eixo secundário do gráfico de Jaru
lines.extend(lines5)  # Adiciona as linhas do eixo secundário
lines6, labels6 = ax2_twin2.get_legend_handles_labels()  # Obtém as linhas do eixo terciário do gráfico de Jaru
lines.extend(lines6)  # Adiciona as linhas do eixo terciário

# Remova rótulos duplicados
unique_labels = list(dict.fromkeys(labels + labels2 + labels3 + labels4 + labels5 + labels6))  # Cria uma lista de rótulos únicos

# Adiciona a legenda à figura
fig.legend(lines, 
unique_labels, 
loc='upper center', 
bbox_to_anchor=(0.5, 0.01), 
ncol=3)  # Coloca a legenda no centro da figura

# Ajuste o layout
plt.tight_layout(rect=[0, 0, 1, 0.95])  # Ajusta os limites da área do gráfico para dar espaço à legenda

# Exibe o gráfico
plt.show()

Rosa dos ventos

Quando se trata de criar rosas dos ventos, o R é uma excelente ferramenta. No entanto, o Python oferece maior flexibilidade estética, permitindo gerar gráficos visualmente mais agradáveis e ajustáveis.

Instale o windrose

Código
# Para gerar a Rosa dos Ventos
!pip install windrose

Bibliotecas

Código
from windrose import WindroseAxes
from matplotlib import pyplot as plt
import matplotlib.cm as cm
import matplotlib.ticker as tkr
import numpy as np
import pandas as pd

Entrada do dado

Código

# Mês de Abril
PVH_Ventos_Abr=pd.read_excel("PVH_Ventos_Abr.xlsx")
# Mês de Maio
PVH_Ventos_Mai=pd.read_excel("PVH_Ventos_Mai.xlsx")
# Mês de Junho
PVH_Ventos_Jun=pd.read_excel("PVH_Ventos_Jun.xlsx")
# Mês de Julho
PVH_Ventos_Jul=pd.read_excel("PVH_Ventos_Jul.xlsx")
# Mês de Agosto
PVH_Ventos_Ago=pd.read_excel("PVH_Ventos_Ago.xlsx")
# Mês de Setembro
PVH_Ventos_Set=pd.read_excel("PVH_Ventos_Set.xlsx")
# Mês de Outubro
PVH_Ventos_Out=pd.read_excel("PVH_Ventos_Out.xlsx")
# Mês de Novembro
PVH_Ventos_Nov=pd.read_excel("PVH_Ventos_Nov.xlsx")
# Mês de Dezembro
PVH_Ventos_Dez=pd.read_excel("PVH_Ventos_Dez.xlsx")
# Mês de Janeiro
PVH_Ventos_Jan=pd.read_excel("PVH_Ventos_Jan.xlsx")
# Mês de Fevereiro
PVH_Ventos_Fev=pd.read_excel("PVH_Ventos_Fev.xlsx")
# Mês de Março
PVH_Ventos_Mar=pd.read_excel("PVH_Ventos_Mar.xlsx")

Rosa dos ventos simples

Código
ax1 = WindroseAxes.from_ax()
ax1.bar(PVH_Ventos_Mai.wd, PVH_Ventos_Mai.ws,
       normed=True, #
       opening=0.8, # largura da direção
       edgecolor='white', # cor das linhas da direção
       bins= 8, # número de elementos da legenda
       nsector=16,  # número de setores
       #cmap=plt.get_cmap('jet'), # cores: jet, turbo, brg - https://matplotlib.org/stable/tutorials/colors/colormaps.html
       )

# Tamnho da fonte do gráfico
ax1.tick_params(axis='both', # os dois eixos
               which='major', # maior
               labelsize= 16) # tamanho

# Legenda
ax1.legend(loc='center', # localização da legenda
          decimal_places=1, # casa decimal
          bbox_to_anchor=(0.17,0.5), #(horiz 0=esq/1=dir,vert 0=bai/1=cima - aceita negativo)
          fontsize=14, # tamanho dos elementos da legenda
          )

# 
ax1.set_title('Maio')

Rosa dos ventos com subplots

Código
# Criando a figura e os subplots
fig,axs = plt.subplots(2, 3, # 2 linhas e 3 colunas
                               subplot_kw=dict(projection='windrose'), 
                               sharex=True,
                               sharey=True,
                              figsize = (12,8)) #largura, altura

# Plotando o gráfico de rosa dos ventos para Abril
axs[0,0].bar(PVH_Ventos_Abr['wd'], PVH_Ventos_Abr['ws'],
       normed=True,
       opening=0.7,
       edgecolor='white',
       #cmap=plt.get_cmap('jet'), # cores: jet, turbo, brg - https://matplotlib.org/stable/tutorials/colors/colormaps.html
       #bins=8,
       bins=np.arange(0.01,10,2.5), # padroniza as seções dos dados (início, final, padrão ps: o final não aparece)
       nsector=16)

# Plotando o gráfico de rosa dos ventos para Maio
axs[0,1].bar(PVH_Ventos_Mai['wd'], PVH_Ventos_Mai['ws'],
       normed=True,
       opening=0.7,
       edgecolor='white', #bins=np.arange(0.01,8,1)
       #bins=8,
       bins=np.arange(0.01,10,2.5), # padroniza as seções dos dados (início, final, padrão - ps: o final não aparece)
       nsector=16)

# Plotando o gráfico de rosa dos ventos para Junho
axs[0,2].bar(PVH_Ventos_Jun['wd'], PVH_Ventos_Jun['ws'],
       normed=True,
       opening=0.7,
       edgecolor='white', #bins=np.arange(0.01,8,1)
       #bins=8,
       bins=np.arange(0.01,10.5,2.5), # padroniza as seções dos dados (início, final, padrão - ps: o final não aparece)
       nsector=16)

# Plotando o gráfico de rosa dos ventos para Julho
axs[1,0].bar(PVH_Ventos_Jul['wd'], PVH_Ventos_Jul['ws'], # é .bar, mas também pode ser: 'contour', 'contourf', 'bar', 'box', 'pdf'
       normed=True,
       opening=0.7,
       edgecolor='white',
       #bins=8,
       bins=np.arange(0.01,10,2.5), # padroniza as seções dos dados (início, final, padrão ps: o final não aparece)
       nsector=16)

# Plotando o gráfico de rosa dos ventos para Agosto
axs[1,1].bar(PVH_Ventos_Ago['wd'], PVH_Ventos_Ago['ws'],
       normed=True,
       opening=0.7,
       edgecolor='white',
       #bins=8,
       bins=np.arange(0.01,10,2.5), # padroniza as seções dos dados (início, final, padrão - ps: o final não aparece)
       nsector=16)

# Plotando o gráfico de rosa dos ventos para Setembro
axs[1,2].bar(PVH_Ventos_Set['wd'], PVH_Ventos_Set['ws'],
       normed=True,
       opening=0.7,
       edgecolor='white', #bins=np.arange(0.01,8,1)
       #bins=8,
       bins=np.arange(0.01,10,2.5), # padroniza as seções dos dados (início, final, padrão - ps: o final não aparece)
       nsector=16)

# Título Abril
axs[0,0].set_title('Abril', loc='center', fontsize=11)
# Texto do gráfico de Abril
axs[0,0].tick_params(axis='both', labelsize=7)

# Como eu padronizei todos os gráficos na mesma escala, coloquei somente uma legenda fora para todos
#axs[0,0].legend(loc="center", 
          #fontsize=10,
          #bbox_to_anchor=(0.17,0.5), #(horiz 0=esq/1=dir,vert 0=bai/1=cima - aceita negativo)
          #)

# Título Maio
axs[0,1].set_title('Maio', loc='center', fontsize=11)
# Texto do gráfico de Maio
axs[0,1].tick_params(axis='both', 
                labelsize=7)
# Como eu padronizei todos os gráficos na mesma escala, coloquei somente uma legenda fora para todos
#axs[0,1].legend(loc="center", 
          #fontsize=10,
          #bbox_to_anchor=(0.17,0.5), #(horiz 0=esq/1=dir,vert 0=bai/1=cima - aceita negativo)
          #)

# Título Junho
axs[0,2].set_title('Junho', loc='center', fontsize=11)
# Texto do gráfico de Junho
axs[0,2].tick_params(axis='both', 
                labelsize=7)
# Como eu padronizei todos os gráficos na mesma escala, coloquei somente uma legenda fora para todos
#axs[0,2].legend(loc="center", 
          #fontsize=10,
          #bbox_to_anchor=(0.17,0.5), #(horiz 0=esq/1=dir,vert 0=bai/1=cima - aceita negativo)
          #)

# Título Julho
axs[1,0].set_title('Julho', loc='center')
# Texto do gráfico de Julho
axs[1,0].tick_params(axis='both', labelsize=7)

# Como eu padronizei todos os gráficos na mesma escala, coloquei somente uma legenda fora para todos
#axs[1,0].legend(loc="center", 
          #fontsize=10,
          #bbox_to_anchor=(0.17,0.5), #(horiz 0=esq/1=dir,vert 0=bai/1=cima - aceita negativo)
          #)

# Título Agosto
axs[1,1].set_title('Agosto', loc='center', fontsize=11)
# Texto do gráfico de Agosto
axs[1,1].tick_params(axis='both', 
                labelsize=7)
# Como eu padronizei todos os gráficos na mesma escala, coloquei somente uma legenda fora para todos
#axs[1,1].legend(loc="center", 
          #fontsize=10,
          #bbox_to_anchor=(0.17,0.5), #(horiz 0=esq/1=dir,vert 0=bai/1=cima - aceita negativo)
          #)

# Configurações do gráfico de rosa dos ventos para Setembro
axs[1,2].set_title('Setembro', loc='center', fontsize=11)
# Texto do gráfico de Setembro
axs[1,2].tick_params(axis='both', 
                labelsize=7)
# Como eu padronizei todos os gráficos na mesma escala, coloquei somente uma legenda fora para todos
#axs[2,2].legend(loc="center", 
          #fontsize=10,
          #bbox_to_anchor=(0.17,0.5), #(horiz 0=esq/1=dir,vert 0=bai/1=cima - aceita negativo)
          #)

# Legenda Padrão Para todos
axs[0,0].legend(loc="center", 
          fontsize=10,
                # Este parâmetro põe a escala em um local específico fora do gráfico
          bbox_to_anchor=(3.7,0) #(horiz 0=esq/1=dir,vert 0=bai/1=cima - aceita negativo) #bbox_to_anchor=(-0.5,0)
          )

# Ajustando o layout
#plt.tight_layout()

# Pôr um espaço entre os subplotes
plt.subplots_adjust(hspace = 0.35, # vertival
                    wspace = 0.15  # horizontal
                   )

# Exibindo o gráfico
plt.show()


Nos vemos na próxima postagem, Aldani👋.