如何使用熊猫数据框中的列标记气泡图/散点图?
Posted
技术标签:
【中文标题】如何使用熊猫数据框中的列标记气泡图/散点图?【英文标题】:How to label bubble chart/scatter plot with column from pandas dataframe? 【发布时间】:2017-05-19 18:24:48 【问题描述】:我正在尝试标记我从 matplotlib 创建的散点图/气泡图,其中包含来自 pandas 数据框中的列的条目。我看过很多相关的例子和问题(参见例如here 和here)。因此,我试图相应地注释情节。这是我的工作:
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()
我使用了 pandas 数据帧,但不知何故得到了 KeyError- 所以我猜应该是 dict()
对象?有没有其他方法可以使用 pandas 数据框中的条目来标记数据?
【问题讨论】:
【参考方案1】:您可以使用DataFrame.plot.scatter
,然后通过DataFrame.iat
循环选择:
ax = df.plot.scatter(x='x', y='y', alpha=0.5)
for i, txt in enumerate(df.users):
ax.annotate(txt, (df.x.iat[i],df.y.iat[i]))
plt.show()
【讨论】:
谢谢!这很棒!有没有办法将其转换为气泡图?我试过ax = df.plot.scatter(x='x', y='y', s='s', alpha=0.5)
,但我得到了TypeError
。有什么想法吗?
您只需要 ax = df.plot.scatter(x='x', y='y', s=s, alpha=0.5)
- 将 s='s'
更改为 s=s
- 输入是列表,而不是列
谢谢!这为我节省了很多时间!
感谢您的接受。顺便说一句,如果使用列 s
- 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,则效果很好。我在原始数据集中有很多缺失。因此,使用列表可以顺利进行。谢谢!【参考方案2】:
Jezreal 的回答很好,但我会发布这个只是为了说明我在另一个帖子中对 df.iterrows
的意思。
如果您想要动态大小,恐怕您也必须将 scatter(或 plot)命令放入循环中。
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']))
【讨论】:
谢谢,这也是一个很好的答案!另外:它可以方便地通过fig, ax = plt.subplots(facecolor='w')
来调整情节的外观!以上是关于如何使用熊猫数据框中的列标记气泡图/散点图?的主要内容,如果未能解决你的问题,请参考以下文章
tableau可视化数据分析60讲(十五)-tableau常用可视化视图(散点图&气泡图)