2016-01-16 43 views
8

Tôi đang cố vẽ một khung dữ liệu Pandas và thêm một dòng để hiển thị trung bình và trung bình. Như bạn có thể thấy bên dưới, tôi đang thêm một đường màu đỏ cho giá trị trung bình, nhưng nó không hiển thị.Dòng trung bình trên đầu cốt truyện với gấu trúc và matplotlib

Nếu tôi cố gắng vẽ đường màu xanh lục ở mức 5, nó hiển thị ở x = 190. Vì vậy, dường như các giá trị x được coi là 0, 1, 2, ... thay vì 160, 165, 170, ...

Làm cách nào để vẽ các đường để giá trị x của chúng khớp với trục x?

Từ Jupyter:

DataFrame plot

Full mã:

%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

bạn có thể gửi một mẫu của các dữ liệu bạn đang âm mưu? –

+0

Nguồn đầy đủ, bao gồm cả dữ liệu đã được thêm ngay bây giờ. – oal

Trả lời

5

Sử dụng plt.bar(freq_frame.index,freq_frame['Heights']) để mưu âm mưu thanh của bạn. Sau đó, các thanh sẽ ở vị trí freq_frame.index. Pandas trong xây dựng chức năng thanh không cho phép xác định vị trí của các thanh, như xa như tôi có thể nói.

%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

Các vấn đề liên quan