Python 3.x 如何使用pandas数据框中的列标记气泡图/散点图?
我正在尝试为从matplotlib创建的散点图/气泡图添加标签,该散点图包含pandas数据框中某列的条目。我看到了大量相关的例子和问题(参见和)。因此,我试图对情节进行相应的注释。以下是我的工作:Python 3.x 如何使用pandas数据框中的列标记气泡图/散点图?,python-3.x,pandas,matplotlib,scatter-plot,Python 3.x,Pandas,Matplotlib,Scatter Plot,我正在尝试为从matplotlib创建的散点图/气泡图添加标签,该散点图包含pandas数据框中某列的条目。我看到了大量相关的例子和问题(参见和)。因此,我试图对情节进行相应的注释。以下是我的工作: import matplotlib.pyplot as plt import pandas as pd #example data frame x = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30] y = [100, 100, 200, 200, 30
import matplotlib.pyplot as plt
import pandas as pd
#example data frame
x = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30]
y = [100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 600, 600]
s = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30]
users =['mark', 'mark', 'mark', 'rachel', 'rachel', 'rachel', 'jeff', 'jeff', 'jeff', 'lauren', 'lauren', 'lauren']
df = pd.DataFrame(dict(x=x, y=y, users=users)
#my attempt to plot things
plt.scatter(x_axis, y_axis, s=area, alpha=0.5)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
plt.annotate(df.users, xy=(x,y))
plt.show()
我使用了一个框架,但不知何故得到了一个keyrerror,所以我猜应该是dict()
对象?是否有其他方法可以使用pandas数据框中的条目标记数据 您可以使用,然后通过以下方式在循环中选择:
Jezreal的回答很好,但我将发布这篇文章,只是为了说明我在另一个线程中使用
df.iterrows
的意思
如果你想有一个动态的大小,恐怕你也必须在循环中加入散布(或绘图)命令
df = pd.DataFrame(dict(x=x, y=y, s=s, users=users))
fig, ax = plt.subplots(facecolor='w')
for key, row in df.iterrows():
ax.scatter(row['x'], row['y'], s=row['s']*5, alpha=.5)
ax.annotate(row['users'], xy=(row['x'], row['y']))
谢谢!这太棒了!有没有办法把它变成泡泡糖?我尝试了
ax=df.plot.scatter(x='x',y='y',s='s',alpha=0.5)
但是我得到了一个类型错误。有什么想法吗?你只需要ax=df.plot.scatter(x='x',y='y',s=s,alpha=0.5)
-将s='s'
更改为s=s
-输入是列表,不是列谢谢!这节省了我不少时间!谢谢你的接受。顺便说一句,如果使用columns
-df=pd.DataFrame(dict(x=x,y=y,users=users,s=s))
则对我有效ax=df.plot.scatter(x=x',y=y',s=df.s,alpha=0.5)
是的,我自己试过了。如果所有条目均为非NaN,则效果良好。我在原始数据集中缺少了很多。因此,使用列表可以顺利地工作。非常感谢。谢谢,这也是一个很好的答案!另外:它可以方便地通过fig,ax=plt.subplot(facecolor='w')
修改绘图的外观!
df = pd.DataFrame(dict(x=x, y=y, s=s, users=users))
fig, ax = plt.subplots(facecolor='w')
for key, row in df.iterrows():
ax.scatter(row['x'], row['y'], s=row['s']*5, alpha=.5)
ax.annotate(row['users'], xy=(row['x'], row['y']))