从pandas数据帧注释散点图

时间:2013-04-11 08:22:42

标签: matplotlib pandas

我正在使用pandas和matplotlib来可视化此数据框

    HDD  EnergyPerSquareMeter   Year
0    3333.6  23.11   1997
1    3349.6  24.30   1998
2    3319.5  24.78   1999
3    3059.1  22.01   2000
4    3287.5  24.17   2001
5    3054.9  20.01   2002
6    3330.0  21.25   2003
7    3307.3  19.22   2004
8    3401.4  18.31   2005
9    3261.6  20.40   2006
10   3212.8  15.34   2008
11   3231.2  15.95   2009
12   3570.1  15.79   2010
13   2995.3  13.88   2011

我想将EnergyPerSquareMeter绘制为散点图(x轴= HDD),并用年份注释点。

我这样做了:

ax =EnergyvsHDD.plot(x='HDD', y='EnergyPerSquareMeter', marker="o" , linestyle='None', figsize=(12,8))
for i, txt in enumerate(EnergyvsHDD['Year']):
    ax.annotate(txt, (x[i],y[i]), size=10, xytext=(0,0), ha='right', textcoords='offset points')

结果是:

enter image description here

这些年份的注释文本不会出现在点附近。我究竟做错了什么?

已更新

使用此代码:

def label_point_orig(x, y, val, ax):
    a = pd.concat({'x': x, 'y': y, 'val': val}, axis=1)
    print a
    for i, point in a.iterrows():
        ax.text(point['x'], point['y'], str(point['val']))

然后:

ax = EnergyvsHDD.set_index('HDD')['EnergyPerSquareMeter'].plot(style='o')
label_point_orig(EnergyvsHDD.HDD, EnergyvsHDD.EnergyPerSquareMeter, EnergyvsHDD.Year, ax)
draw()

这些要点没有出现在适当的地方:

enter image description here

尽管使用此代码可行:

plt.scatter(list(EnergyvsHDD.HDD), list(EnergyvsHDD.EnergyPerSquareMeter))
label_point_orig(EnergyvsHDD.HDD, EnergyvsHDD.EnergyPerSquareMeter, EnergyvsHDD.Year, plt)
draw()

enter image description here

有人知道为什么吗?

1 个答案:

答案 0 :(得分:5)

我的答案给出了一个有效的例子Annotate data points while plotting from Pandas DataFrame

适用于您的数据集

enter image description here

您展示的代码不是自包含的。什么是xy?希望它们是与您的DataFrame的正确列对应的Series。我最好的猜测是,他们不是你认为的那样。直接使用EnergyvsHDD DataFrame中的列会更安全。 (见我的链接答案。)