在 seaborn 中编辑标签和移动图例
Edit labels and move legend in seaborn
我有一个 seaborn 散点图,我想更改它的标签并将图例移到图表之外。有很多解决方案可以解决每个问题,但我无法同时解决这两个问题。改编自 Whosebug 中用于 sns.lmplot
:
的解决方案
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
g = sns.scatterplot(x="total_bill", y="tip", hue="smoker", data=tips, legend=False)
plt.legend(title='Smoker', bbox_to_anchor=(1.05, 1), labels=['Hell Yeh', 'Nah Bruh'])
plt.show(g)
此处legend=False
由 matplotlib 稍后定义。问题是该图仅显示第一个标签,而不显示图例中的其余标签。
我试过另一种修改标签的方法legend='full'
,后来修改:
g = sns.scatterplot(x="total_bill", y="tip", hue="smoker", data=tips, legend='full')
h,l = g.get_legend_handles_labels()
l = ['Smoking behaviors:','Hell Yeh', 'Nah Bruh']
g.legend(h, l)
但命令 g.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
无法正常工作,编辑的标签也不会显示。仅显示原始标签。
所以,我可以分别解决这两个问题,但不能同时解决。
在当前版本的 Seaborn 散点图 (0.11.1) 中,您可以先创建完整的图例,然后再次调用 ax.legend()
进行更改。
请注意,sns.scatterplot
的 return 值是一个 ax
,因为它是一个 axis-level function。这不应与图形级函数混淆,后者 return 一个完整的“轴”网格,通常写为 g = sns...
.
不同的 seaborn 函数以不同的方式创建图例。根据所使用的选项,图例可能会变得相当复杂且不易更改。让图例更容易修改是 Seaborn 未来开发计划中的计划。
from matplotlib import pyplot as plt
import seaborn as sns
tips = sns.load_dataset('tips')
ax = sns.scatterplot(x="total_bill", y="tip", hue="smoker", data=tips, legend='full')
ax.legend(title='Smoker', bbox_to_anchor=(1.05, 1), labels=['Hell Yeh', 'Nah Bruh'])
plt.tight_layout()
plt.show()
我有一个 seaborn 散点图,我想更改它的标签并将图例移到图表之外。有很多解决方案可以解决每个问题,但我无法同时解决这两个问题。改编自 Whosebug 中用于 sns.lmplot
:
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
g = sns.scatterplot(x="total_bill", y="tip", hue="smoker", data=tips, legend=False)
plt.legend(title='Smoker', bbox_to_anchor=(1.05, 1), labels=['Hell Yeh', 'Nah Bruh'])
plt.show(g)
此处legend=False
由 matplotlib 稍后定义。问题是该图仅显示第一个标签,而不显示图例中的其余标签。
我试过另一种修改标签的方法legend='full'
,后来修改:
g = sns.scatterplot(x="total_bill", y="tip", hue="smoker", data=tips, legend='full')
h,l = g.get_legend_handles_labels()
l = ['Smoking behaviors:','Hell Yeh', 'Nah Bruh']
g.legend(h, l)
但命令 g.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
无法正常工作,编辑的标签也不会显示。仅显示原始标签。
所以,我可以分别解决这两个问题,但不能同时解决。
在当前版本的 Seaborn 散点图 (0.11.1) 中,您可以先创建完整的图例,然后再次调用 ax.legend()
进行更改。
请注意,sns.scatterplot
的 return 值是一个 ax
,因为它是一个 axis-level function。这不应与图形级函数混淆,后者 return 一个完整的“轴”网格,通常写为 g = sns...
.
不同的 seaborn 函数以不同的方式创建图例。根据所使用的选项,图例可能会变得相当复杂且不易更改。让图例更容易修改是 Seaborn 未来开发计划中的计划。
from matplotlib import pyplot as plt
import seaborn as sns
tips = sns.load_dataset('tips')
ax = sns.scatterplot(x="total_bill", y="tip", hue="smoker", data=tips, legend='full')
ax.legend(title='Smoker', bbox_to_anchor=(1.05, 1), labels=['Hell Yeh', 'Nah Bruh'])
plt.tight_layout()
plt.show()