matplotlib 编辑海运散点图和计数图的图例标题和标签

pprl5pva  于 2022-12-23  发布在  其他
关注(0)|答案(3)|浏览(173)

我正在使用泰坦尼克号数据集的散点图和计数图。
这是我画散点图的代码.我还试着编辑图例标签.

ax = seaborn.countplot(x='class', hue='who', data=titanic)
legend_handles, _ = ax.get_legend_handles_labels()
plt.show();

为了编辑图例标签,我这样做了。在这种情况下,不再有图例标题。我如何将此标题从“who”重命名为“who1”?

ax = seaborn.countplot(x='class', hue='who', data=titanic)
legend_handles, _= ax.get_legend_handles_labels()
ax.legend(legend_handles, ['man1','woman1','child1'], bbox_to_anchor=(1,1))
plt.show()

我用同样的方法编辑了散点图上的图例标签,但结果不同。它使用“dead”作为图例标题,使用“survived”作为第一个图例标签。

ax = seaborn.scatterplot(x='age', y='fare', data=titanic, hue = 'survived')
legend_handles, _= ax.get_legend_handles_labels()
ax.legend(legend_handles, ['dead', 'survived'],bbox_to_anchor=(1.26,1))
plt.show()

1.是否有删除和添加图例标题的参数?
1.我在两个不同的图表上使用了相同的代码,但图例的结果却不一样,这是为什么?

ekqde3dh

ekqde3dh1#

尝试使用

ax.legend(legend_handles, ['man1','woman1','child1'], 
          bbox_to_anchor=(1,1), 
          title='whatever title you want to use')
dwbf0jvd

dwbf0jvd2#

对于seaborn v0.11.2或更高版本,请使用move_legend()函数。
FAQs page
对于seaborn v0.11.2或更高版本,请使用move_legend()函数。

  • 在旧版本中,常见的模式是在绘图后调用ax.legend(loc =...)。虽然这看起来像是移动图例,但实际上它会使用碰巧附加到轴的任何带标签的艺术家将其替换为新图例。这在绘图类型中并不一致。而且它不会传播图例标题或用于格式化多变量图例的定位调整。*
  • move_legend()函数实际上比它的名字所暗示的要强大得多,它还可以用来在绘图后修改其他图例参数(字体大小、句柄长度等)。*
vmjh9lq9

vmjh9lq93#

为什么图例顺序有时会不同?

您可以通过hue_order=['man', 'woman', 'child']强制图例的顺序。默认情况下,顺序是它们在 Dataframe 中出现的顺序(当值只是字符串时),或者是pd.Categorical强制的顺序。

如何重命名图例条目

最可靠的方法是重命名列值,例如:

titanic["who"] = titanic["who"].map({'man': 'Man1', 'woman': 'Woman1', 'child': 'Child1'})

如果列中的条目包含0,1,...范围内的数字,则可以使用pd.Categorical.from_codes(...)。这也会强制排序。

特定色调值的特定颜色

有许多选项可以指定要使用的颜色(通过palette=)。要将特定颜色分配给特定色调值,调色板可以是字典,例如:

palette = {'Man1': 'cornflowerblue', 'Woman1': 'fuchsia', 'Child1': 'limegreen'}

重命名或删除图例标题

sns.move_legend(ax, title=..., loc='best')设置一个新的标题。将标题设置为空字符串会删除它(当条目是自解释的时候这很有用)。

代码示例

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

titanic = sns.load_dataset('titanic')
# titanic['survived'] = titanic['survived'].map({0:'Dead', 1:'Survived'})
titanic['survived'] = pd.Categorical.from_codes(titanic['survived'], ['Dead', 'Survived'])
palette = {'Dead': 'navy', 'Survived': 'turquoise'}

ax = sns.scatterplot(data=titanic, x='age', y='fare', hue='survived', palette=palette)
sns.move_legend(ax, title='', loc='best')  # remove the title

plt.show()

相关问题