Le traçage de 2 diagrammes distplots ou nuages de points dans un sous-diagramme fonctionne très bien:
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import pandas as pd
%matplotlib inline
# create df
x = np.linspace(0, 2 * np.pi, 400)
df = pd.DataFrame({'x': x, 'y': np.sin(x ** 2)})
# Two subplots
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(df.x, df.y)
ax1.set_title('Sharing Y axis')
ax2.scatter(df.x, df.y)
plt.show()
Mais quand je fais de même avec un lmplot
au lieu de l'un des autres types de graphiques, j'obtiens une erreur:
AttributeError: l'objet 'AxesSubplot' n'a pas d'attribut 'lmplot'
Existe-t-il un moyen de tracer ces types de graphiques côte à côte?
Vous obtenez cette erreur car matplotlib et ses objets ignorent complètement les fonctions de la mer.
Passez vos objets axes (c'est-à-dire ax1
et ax2
) à seaborn.regplot
ou vous pouvez ignorer leur définition et utiliser le col
kwarg de seaborn.lmplot
Avec vos mêmes importations, prédéfinir vos axes et utiliser regplot
ressemble à ceci:
# create df
x = np.linspace(0, 2 * np.pi, 400)
df = pd.DataFrame({'x': x, 'y': np.sin(x ** 2)})
df.index.names = ['obs']
df.columns.names = ['vars']
idx = np.array(df.index.tolist(), dtype='float') # make an array of x-values
# call regplot on each axes
fig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True)
sns.regplot(x=idx, y=df['x'], ax=ax1)
sns.regplot(x=idx, y=df['y'], ax=ax2)
L'utilisation de lmplot nécessite votre le cadre de données doit être rangé . Suite du code ci-dessus:
tidy = (
df.stack() # pull the columns into row variables
.to_frame() # convert the resulting Series to a DataFrame
.reset_index() # pull the resulting MultiIndex into the columns
.rename(columns={0: 'val'}) # rename the unnamed column
)
sns.lmplot(x='obs', y='val', col='vars', hue='vars', data=tidy)