2013-04-11 30 views
11

używam pandy i matplotlib wizualizować ten dataframeAnnotate rozrzutu z dataframe pandy

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 

i chciałbym wykreślić EnergyPerSquareMeter jako rozrzutu (z osi x = HDD) i opisywanie punkty o rok.

Zrobiłem to:

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') 

Wynikiem jest:

enter image description here

Opatrzony uwagami tekst latach doesnt pojawiają się w pobliżu punktów. Co ja robię źle?

AKTUALIZACJA

Stosując ten kod:

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'])) 

, a następnie:

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

Punkty nie pojawia się w odpowiednim miejscu:

enter image description here

Chociaż przy użyciu tego kodu to działa:

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

enter image description here

Czy ktoś wie dlaczego?

+0

możliwy duplikat [Adnotacja punktów danych podczas drukowania z Pandas DataFrame] (http://stackoverflow.com/questions/15910019/annotate-data-points-while-plotting-from-pandas- Dataframe) –

+0

Użyłem tego kodu do generowania etykiet, jednak wydaje się, że pokazuje wartości zmiennoprzecinkowe, nawet moje wartości są typami całkowitymi. Czy masz ten sam problem? – ejshin1

Odpowiedz

2

Ta odpowiedź kopalni daje przykład roboczych Annotate data points while plotting from Pandas DataFrame

który działa na zbiorze

enter image description here

Kod masz pokazane nie jest samowystarczalny. Co to są x i y? Mamy nadzieję, że są to Serie odpowiadające właściwym kolumnom DataFrame. Domyślam się, że nie są tym, za kogo się uważasz. Byłoby bezpieczniej używać kolumn z twojej DataFrame EnergyvsHDD bezpośrednio. (Zobacz moją połączoną odpowiedź.)