如何解决如何在叠加散点图上进行注释标签? 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 举报,一经查实,本站将立刻删除。