如何解决使用多个标签为单个数据帧调整图例 Seaborn 关节图
Column 1 Column2 Column3
x1 y1 0
x2 y2 0
x3 y3 1
x4 y4 1
x5 y5 1
....
x_n-1 y_n-1 5
x_n y_n 5
我想创建一个联合图,根据 Column3 的值分配不同的颜色。我使用的命令是
h = sns.jointplot(x="Column1",y="Column2",data=data,hue="Column3")
所以我所有的点都有 6 种不同的颜色。上一条命令产生的图例带有标签“0”、“1”、...“5”,这些标签没有解释。我想要“label0”、“label1”等,而不是它们。
我尝试使用以下命令:
h.ax_joint.legend([data.loc[data['Column3'] == 0],data.loc[data['Column3'] == 1],data.loc[data['Column3'] == 2],data.loc[data['Column3'] == 3],data.loc[data['Column3'] == 4],data.loc[data['Column3'] == 5]],['label0','label1','label2','label3','label4','label5'])
但是执行它我有以下消息:
A proxy artist may be used instead. See: https://matplotlib.org/users/legend_guide.html#creating-artists-specifically-for-adding-to-the-legend-aka-proxy-artists
当然,它不再绘制任何图例了。我一直在查看建议的文档,但我不知道如何改进它。有人有想法吗?提前致谢!
解决方法
最简单也是最符合 Seaborn 精神的方法是(暂时)重命名色调列的标签:
import seaborn as sns
import pandas as pd
import numpy as np
data = pd.DataFrame({"Column1": np.random.randn(36) * 10,"Column2": np.arange(36) % 6 + np.random.randn(36) / 4,"Column3": np.arange(36) % 6})
labels = ['label0','label1','label2','label3','label4','label5']
g = sns.jointplot(data=data.replace({"Column3": {i: label for i,label in enumerate(labels)}}),x="Column1",y="Column2",hue="Column3",palette="turbo")
g.ax_joint.invert_yaxis()
另一种选择是再次创建图例并提供新标签。第二个图例将替换默认图例。如果您还想更改其他属性(例如图例的位置或删除其标题),这会很有用:
g = sns.jointplot(x="Column1",data=data,palette="turbo")
handles,labels = g.ax_joint.get_legend_handles_labels()
g.ax_joint.legend(handles=handles,labels=['label0','label5'],title="Column3")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。