Il semble que je sois resté coincé devant un problème relativement simple, mais que je n’ai pas pu le résoudre après avoir cherché pendant une heure et beaucoup d’expériences.
J'ai deux tableaux numpy x
et y
et j'utilise l'intrigue commune de seaborn pour les tracer:
sns.jointplot(x, y)
Maintenant, je veux étiqueter xaxis et yaxis en tant que "libellé d'axe X" et "libellé d'axe Y", respectivement. Si j'utilise plt.xlabel
, les étiquettes vont à la distribution marginale. Comment puis-je les faire apparaître sur les axes communs?
sns.jointplot retourne un JointGrid object, qui vous donne accès aux axes matplotlib et vous pourrez ensuite manipuler à partir de là.
import seaborn as sns
import numpy as np
#example data
X = np.random.randn(1000,)
Y = 0.2 * np.random.randn(1000) + 0.5
h = sns.jointplot(X, Y)
# JointGrid has a convenience function
h.set_axis_labels('x', 'y', fontsize=16)
# or set labels via the axes objects
h.ax_joint.set_xlabel('new x label', fontweight='bold')
# also possible to manipulate the histogram plots this way, e.g.
h.ax_marg_y.grid('on') # with ugly consequences...
# labels appear outside of plot area, so auto-adjust
plt.tight_layout()
(Le problème avec votre tentative est que des fonctions telles que plt.xlabel("text")
opèrent sur l'axe actuel, qui n'est pas l'axe central dans sns.jointplot; mais l'interface orientée objet est plus précise quant à son fonctionnement).
Vous pouvez également spécifier les étiquettes des axes dans un pandas DataFrame
dans l'appel à jointplot
.
import pandas as pd
import seaborn as sns
x = ...
y = ...
data = pd.DataFrame({
'X-axis label': x,
'Y-axis label': y,
})
sns.jointplot(x='X-axis label', y='Y-axis label', data=data)