Sil*_*ngo 13 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
Run Code Online (Sandbox Code Playgroud)
我想将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')
Run Code Online (Sandbox Code Playgroud)
结果是:

这些年份的注释文本不会出现在点附近.我究竟做错了什么?
更新
使用此代码:
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']))
Run Code Online (Sandbox Code Playgroud)
然后:
ax = EnergyvsHDD.set_index('HDD')['EnergyPerSquareMeter'].plot(style='o')
label_point_orig(EnergyvsHDD.HDD, EnergyvsHDD.EnergyPerSquareMeter, EnergyvsHDD.Year, ax)
draw()
Run Code Online (Sandbox Code Playgroud)
这些点没有出现在适当的位置:

虽然使用此代码但它的工作原理
plt.scatter(list(EnergyvsHDD.HDD), list(EnergyvsHDD.EnergyPerSquareMeter))
label_point_orig(EnergyvsHDD.HDD, EnergyvsHDD.EnergyPerSquareMeter, EnergyvsHDD.Year, plt)
draw()
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?
我的这个答案给出了一个工作示例,在从Pandas DataFrame进行绘制时注释数据点
对您的数据集有效

您显示的代码不是独立的。什么是x和y?希望它们是与您的DataFrame的正确列相对应的Series。我最好的猜测是,它们不是您认为的那样。EnergyvsHDD直接使用DataFrame中的列会更安全。(请参阅我的链接答案。)
| 归档时间: |
|
| 查看次数: |
18313 次 |
| 最近记录: |