'Seaborn Pariplot: how to move legend and set style
I'm trying to get a pairplot of my data using seaborn. I want to set the legend outside of the axes because my other plots might have upto 9 features which makes the plot too corwded.
My codes are:
import seaborn as sns
my_data = data
# a 80x4 dataframe. The last column key is label, and two different labels are in that column.
ax = sns.pairplot(my_data, hue="label")
The output has two problem:
I've tried to use move_legend
according to the documentation here. I should be able to use bbox_to_anchor
to set the exact location of my legend, so I added the following code:
sns.move_legend(ax, "lower center", bbox_to_anchor=(0.5, -0.1))
# I want to place the legend in lower center and outside of the axes
but somehow my legend just disapeared.
When I do similar operation using matplotlib
, the figure size is adjusted automatically, but the pairplot using seaborn is not changing at all which might be the reason. But I don't know how to fix it.
Update: The data I use is uploaded to Google Drive and can be accessed via this link.
Solution 1:[1]
pairplot
already adds a legend outside the plot matrix. I do not know how you could get it inside of plot area. Probably there is something with plot figure size. I need more information about your code to detect the issue.
I've used test data in order to show some examples of plot legend locations.
# pip install matplotlib
# pip install seaborn
import seaborn as sns
import matplotlib.pyplot as plt
penguins = sns.load_dataset("penguins")
g = sns.pairplot(penguins, hue="species")
handles = g._legend_data.values()
labels = g._legend_data.keys()
g.fig.legend(handles=handles, labels=labels, loc='upper center', ncol=1)
g.fig.legend(handles=handles, labels=labels, loc='lower center', ncol=3)
g.fig.legend(handles=handles, labels=labels, loc='upper left', ncol=3)
g.fig.subplots_adjust(top=0.92, bottom=0.08)
plt.show()
Solution 2:[2]
It turns out to be a problem with Pycharm. After saving the figure to a file, the legends in both my code
sns.move_legend(g, "lower center", bbox_to_anchor=(0.5, -0.1))
and @gremur's code
g = sns.pairplot(penguins, hue="species")
handles = g._legend_data.values()
labels = g._legend_data.keys()
g.fig.legend(handles=handles, labels=labels, loc='upper center', ncol=1)
g.fig.legend(handles=handles, labels=labels, loc='lower center', ncol=3)
g.fig.legend(handles=handles, labels=labels, loc='upper left', ncol=3)
g.fig.subplots_adjust(top=0.92, bottom=0.08)
are working as expected.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | gremur |
Solution 2 | Zheng |