微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在叠加散点图上进行注释标签? 2个单独的数字同一图形上的2个子图两个散点图都在相同的轴上传奇

如何解决如何在叠加散点图上进行注释标签? 2个单独的数字同一图形上的2个子图两个散点图都在相同的轴上传奇

这是我的代码。我在第二个地块标签上出现错误。如何包括两个相互重叠的散点图的标签。另外,如何添加图例以指定绿色为“叶子”,红色为“水果”。 预先感谢。

import pandas as pd
import matplotlib.pyplot as plt

df = {'id': ['a','b','c','d'],'x1': [2,3,4,5],'y1': [2,6,7,2],'x2': [4,5,7],'y2':[4,9]}
df = pd.DataFrame(df)

ax =df.plot.scatter('x1','y1',c='green')
for i,txt in enumerate(df.id):
    ax.annotate(txt,(df.x1.iat[i],df.y1.iat[i]))
ax =plt.scatter(df['x2'],df['y2'],c='red')
for i,(df.x2.iat[i],df.y2.iat[i]))
plt.show()

解决方法

问题是,当您调用plt.scatter时,您已经重命名了ax变量。当熊猫df.plot.scatter返回创建该绘图的matplotlib Axes实例时,本机matplotlib plt.scatter返回一个PathCollection实例。然后,您尝试调用ax.annotate,但是annotate不是用于路径收集的有效方法。

从matplotlib创建轴比较安全,然后可以控制应在何处创建每个图。

在这里,我将假设您出于某种原因打算使用两种不同的散布方法,并说明如何控制它们出现在哪些轴上。

您没有明确说明希望每个散点图出现的位置,因此有两个选择:

2个单独的数字

假设您想在单独的Figure实例中使用两个散点图,则可以执行以下操作:

import pandas as pd
import matplotlib.pyplot as plt

df = {'id': ['a','b','c','d'],'x1': [2,3,4,5],'y1': [2,6,7,2],'x2': [4,5,7],'y2': [4,9]}
df = pd.DataFrame(df)

fig1,ax1 = plt.subplots()
df.plot.scatter('x1','y1',c='green',ax=ax1)
for i,txt in enumerate(df.id):
    ax1.annotate(txt,(df.x1.iat[i],df.y1.iat[i]))

fig2,ax2 = plt.subplots()
ax2.scatter(df['x2'],df['y2'],c='red')
for i,txt in enumerate(df.id):
    ax2.annotate(txt,(df.x2.iat[i],df.y2.iat[i]))

plt.show()

同一图形上的2个子图

假设您要在同一图形上有两个子图:

import pandas as pd
import matplotlib.pyplot as plt

df = {'id': ['a',9]}
df = pd.DataFrame(df)

fig,(ax1,ax2) = plt.subplots(ncols=2)

df.plot.scatter('x1',df.y1.iat[i]))

ax2.scatter(df['x2'],df.y2.iat[i]))

plt.show()

两个散点图都在相同的轴上

假设您希望两个散点图都出现在同一子图中,那么您可以:

import pandas as pd
import matplotlib.pyplot as plt

df = {'id': ['a',ax = plt.subplots()

df.plot.scatter('x1',ax=ax)
for i,txt in enumerate(df.id):
    ax.annotate(txt,df.y1.iat[i]))

ax.scatter(df['x2'],df.y2.iat[i]))

plt.show()

传奇

最后,回答有关标签颜色的问题。您可以为每个散点图实例分配一个label,例如:

df.plot.scatter('x1',ax=ax,label='leaf')
ax.scatter(df['x2'],c='red',label='fruit')

并使用以下命令在给定的轴上产生图例:

ax.legend()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。