2016-01-16 2 views
8

Bir Pandas DataFrame grafiği çizmeye çalışıyorum ve ortalama ve medyanı göstermek için bir satır eklemeye çalışıyorum. Aşağıda görebileceğiniz gibi, ortalama için kırmızı bir çizgi ekliyorum, ama göstermiyor.Pandalar ve matplotlib ile çubuk arsasının üstündeki ortalama satır

5'de yeşil bir çizgi çizmeye çalışırsam x = 190 gösterir. Görünüşe göre x değerleri, 160, 165, 170, yerine 0, 1, 2, ... olarak değerlendirilir ...

Satırları x değerleri x eksenine eşit olacak şekilde nasıl çizebilirim?

Jupyter itibaren

:

DataFrame plot

Tam kodu:

%matplotlib inline 

from pandas import Series 
import matplotlib.pyplot as plt 

heights = Series(
    [165, 170, 195, 190, 170, 
    170, 185, 160, 170, 165, 
    185, 195, 185, 195, 200, 
    195, 185, 180, 185, 195], 
    name='Heights' 
) 
freq = heights.value_counts().sort_index() 


freq_frame = freq.to_frame() 

mean = heights.mean() 
median = heights.median() 

freq_frame.plot.bar(legend=False) 

plt.xlabel('Height (cm)') 
plt.ylabel('Count') 

plt.axvline(mean, color='r', linestyle='--') 
plt.axvline(5, color='g', linestyle='--') 

plt.show() 
+0

Eğer komplo verilerin bir örneği gönderebilir miyim? –

+0

Veri dahil olmak üzere tam kaynak şimdi eklendi. – oal

cevap

5

kullanın plt.bar(freq_frame.index,freq_frame['Heights']) sizin çubuk işaretler çizmek için. Ardından çubuklar freq_frame.index pozisyonlarında olacaktır. Pandalar in-build bar fonksiyonu, söyleyebileceğim kadarıyla barların pozisyonlarını belirlemeye izin vermez.

%matplotlib inline 

from pandas import Series 
import matplotlib.pyplot as plt 

heights = Series(
    [165, 170, 195, 190, 170, 
    170, 185, 160, 170, 165, 
    185, 195, 185, 195, 200, 
    195, 185, 180, 185, 195], 
    name='Heights' 
) 
freq = heights.value_counts().sort_index() 

freq_frame = freq.to_frame() 

mean = heights.mean() 
median = heights.median() 

plt.bar(freq_frame.index,freq_frame['Heights'], 
     width=3,align='center') 

plt.xlabel('Height (cm)') 
plt.ylabel('Count') 

plt.axvline(mean, color='r', linestyle='--') 
plt.axvline(median, color='g', linestyle='--') 

plt.show() 

bar plot