Oi Ruy! Tudo bem com você?
Peço desculpas pela demora em dar um retorno.
Sim! Seria possível fazer essa figura combinada por meio da função subplots. Entretanto, acredito que compartilhar os eixos das mesmas não funcionaria muito bem, uma vez que, os valores encontrados em cada um dos 3 histogramas gerados variam muito.
Fazendo um código aqui para gerar esses gráficos em um único subplot, primeiramente eu criei a figura e os 3 eixos por meio do comando:
fig, (eixo, eixo2, eixo3) = plt.subplots(1,3, figsize=(25,10))
Como a intenção era colocar os 3 gráficos lado a lado, optei por criar 1 linha com 3 colunas. E nomeei os respectivos eixos como eixo, eixo2 e eixo3. Após isso, foi feito o mesmo procedimento que o professor realizou para a criação dos gráficos, o que mudou foi que, agora, cada gráfico possui um nome diferente para a variável que armazena cada um de seus eixos:
import matplotlib.pyplot as plt
fig, (eixo, eixo2, eixo3) = plt.subplots(1,3, figsize=(25,10))
#------------------------------------------------ grafico 1 -------------------------------------------------------------------
df_iv = df[df['espécie'] == 'Iris-versicolor']
mu, sigma = df['comprimento_pétala'].mean(), df['comprimento_pétala'].std()
eixo.hist(df['comprimento_pétala'], bins=20)
eixo.set_title('Histograma', fontsize=15, pad=10)
eixo.set_xlabel('Comprimento da pétala', fontsize=15)
eixo.grid(True)
eixo.annotate('$\mu - {0:.2f}$\n$\sigma - {1:.2f}$ '.format(mu, sigma),
xy=(4.5, 20), fontsize=20)
eixo.axvline(mu, color='k', linestyle='--')
eixo.annotate('média', xy= (mu-1.3, 28), fontsize=20)
eixo.axvline(df['comprimento_pétala'].median(), color='g', linestyle='--')
eixo.annotate('mediana', xy=(df['comprimento_pétala'].median(), 31), fontsize=20)
#------------------------------------------------ grafico 2 -------------------------------------------------------------------
df_is = df[df['espécie'] == 'Iris-setosa']
mu, sigma = df_is['comprimento_pétala'].mean(), df_is['comprimento_pétala'].std()
eixo2.hist(df_is['comprimento_pétala'], bins=20)
eixo2.set_title('Iris Setosa', fontsize=15, pad=10)
eixo2.set_xlabel('Comprimento da pétala', fontsize=15)
eixo2.grid(True)
eixo2.annotate('$\mu - {0:.2f}$\n$\sigma - {1:.2f}$ '.format(mu, sigma),
xy=(1.7, 7), fontsize=20)
eixo2.axvline(mu, color='k', linestyle='--')
eixo2.annotate('média', xy= (mu-0.2, 13.5), fontsize=20)
eixo2.axvline(df_is['comprimento_pétala'].median(), color='g', linestyle='--')
eixo2.annotate('mediana', xy=(df_is['comprimento_pétala'].median()+0.05, 12), fontsize=20,
color='g')
#------------------------------------------------ grafico 3 -------------------------------------------------------------------
df_v = df[df['espécie'] == 'Iris-virginica']
mu, sigma = df_v['comprimento_pétala'].mean(), df_v['comprimento_pétala'].std()
eixo3.hist(df_v['comprimento_pétala'], bins=20)
eixo3.set_title('Iris Virginica', fontsize=15, pad=10)
eixo3.set_xlabel('Comprimento da pétala', fontsize=15)
eixo3.grid(True)
eixo3.annotate('$\mu - {0:.2f}$\n$\sigma - {1:.2f}$ '.format(mu, sigma),
xy=(6.3, 7), fontsize=20)
eixo3.axvline(mu, color='k', linestyle='--')
eixo3.annotate('média', xy= (mu, 8), fontsize=20)
eixo3.axvline(df_v['comprimento_pétala'].median(), color='g', linestyle='--')
eixo3.annotate('mediana', xy=(df_v['comprimento_pétala'].median(), 7), fontsize=20,
color='g')
fig.savefig('combinada_subplots.png', bbox_inches='tight')
Fazendo dessa forma, nós obtemos o seguinte resultado:
E por meio da última linha desse código fig.savefig('combinada_subplots.png', bbox_inches='tight')
nós salvamos a figura conforme o professor faz em aula.
Espero ter ajudado.
Qualquer dúvida estou por aqui, tá bom?
Bons estudos!