0

假设我有一个具有此结构的熊猫数据帧:

第1列第2列第3列x1 y1 0个x2年20x3年3月1日x4年4月1日x5年5月1日....x n-1 y n-1 5x n y n 5

我想创建一个jointplot,根据Column3的值分配不同的颜色。我使用的命令是

h=sns.jointplot(x=“第1列”,y=“第2列”,数据=数据,色调=“第3列”)

所以我有我所有的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['Column 3']==3],data-loc[data['Colomn3']==4],data.loc[data[‘Column3+’]==5]],['label0','label1','labell2','label3','label4','tabel5'])

但执行它时,我得到了以下消息:

可以使用代理艺术家。请参见:https://matplotlib.org/users/legend_guide.html#创建-专门为传奇添加的艺术家,又称代理艺术家

当然,它不再描绘任何传奇。我一直在查看建议的文档,但我不知道如何改进它。有人有主意吗?提前谢谢!

1答案1

重置为默认值
2

最简单、最符合Seaborn精神的方法是(暂时)重命名色调列的标签:

作为sns导入seaborn进口熊猫作为pd将numpy导入为np数据=pd.DataFrame({“第1列”:np.random.randn(36)*10,“Column2”:np.arange(36)%6+np.random.randn(36)/4,“Column3”:np.arange(36)%6})labels=['label0','label1','labell2','tabel3','abel4','label5']g=sns.jointplot(data=data.replace({“Column3”:{i:i的标签,enumerate中的标签(标签)}}),x=“第1列”,y=“第2列”,色调=“第3列”,调色板=“turbo”)g.ax_joint.invert_yaxis()

带有更改图例的sns.jointplot

另一种选择是再次创建图例并提供新标签。第二个图例将替换默认图例。如果您还想更改其他属性,例如图例的位置或删除其标题,这将非常有用:

g=sns.jointplot(x=“第1列”,y=“第2列”,数据=数据,色调=“第3列”,调色板=“turbo”)句柄,标签=g.ax_joint.get_legend_handles_labels()g.ax_joint.legend(句柄=句柄,标签=['label0','label1','labell2','tabel3','label4','abel5'],title=“Column3”)

PS:下面是一个示例sns.jointplot(…,kind=“kde”):

作为sns导入seaborn进口熊猫作为pd将numpy导入为np数据=pd.DataFrame({“第1列”:np.random.randn(36)*10,“Column2”:np.arange(36)%6+np.random.randn(36)/4,“Column3”:np.arange(36)%6})labels=['label0','label1','labell2','tabel3','abel4','label5']g=sns.jointplot(data=data.replace({“Column3”:{i:i的标签,enumerate中的标签(标签)}}),x=“第1列”,y=“第2列”,hue=“第3列”,palette=“turbo”,kind=“kde”)g.ax_joint.invert_yaxis()

kind=kde和新标签的jointplot

6
  • 当您设置色调参数、使用kind=“kde”并尝试向绘图中添加带有标签的线时,这两种方法都不起作用,因为无论出于何种原因,kind=”kde“都不会返回句柄和标签。
    – 凯尔卡
    评论 2021年10月13日13:19
  • 我做了更多的测试,似乎设置“kind”会覆盖“hue”,所以总是返回句柄和标签的空列表。
    – 凯尔卡
    评论 2021年10月13日13:28
  • 1
    @第一种方法似乎很适用kind=“kde”(使用海生0.11.2)。第二种方法不起作用,因为kdeplot创建了一个您无法通过访问的自定义图例g.ax_joint.get_legend_handles_labels(),尽管您可以使用句柄=g.ax_joint.legend_.legendHandles而不是。
    – 约翰·C
    评论 2021年10月13日16:46
  • 我最终没有使用'kind=“kde”,而是使用了g.plot_joint(sns.kdeplot),它允许我通过'g.ax_joint.get_legend_handles_labels()'访问图例
    – 凯尔卡
    评论 2021年10月14日10:57
  • 1
    @凯尔卡很高兴你找到了一种适合你的方法。图像出现了一些问题,但代码可以按照描述工作,至少在我的环境中是这样。我现在上传了正确的图片。
    – 约翰·C
    评论 2021年10月14日11:58

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.