2017-10-15 92 views
2

這個簡單的代碼繪製預期折線圖:爲什麼matplotlib開始繪製的條形圖,而不是線圖

james_f=names[(names.name=='James') & (names.sex=='F')] 
plt.plot(james_f['year'],james_f['births'])  
plt.show() 

enter image description here

但後來我改變狀態,只需刪除其中的一個,然後它開始繪製條形圖。爲什麼以及如何強制繪製折線圖?

james_f=names[(names.name=='James')] 
plt.plot(james_f['year'],james_f['births'])  
plt.show() 

enter image description here

增加,而不是它1 == 1條規則,沒有什麼變化(

james_f=names[(names.name=='James') & (1 == 1)] 
plt.plot(james_f['year'],james_f['births'])  
plt.show() 

即使這個代碼繪製條形圖:

james_f=names[(names.name=='James') | (names.name=='John') | (names.name=='Robert') ] 
plt.plot(james_f['year'],james_f['births']) 

james_f['births']輸出(大熊貓。 core.series.Series):

228   46 
343   22 
538   11 
942   9655 
944   5927 
2312   26 
2329   24 
2617   9 
2938  8769 
.... 
Name: births, dtype: int64 

james_f['births'].min()回7沒有零或NaN值

>>> print(james_f[james_f['births'].isnull()]) 
Empty DataFrame 
Columns: [name, sex, births, year] 
Index: [] 


>>> james_f.head(10) 
     name sex births year 
343  James F 22  1880 
944  James M 5927 1880 
2329 James F 24  1881 
2940 James M 5441 1881 
4372 James F 18  1882 
4965 James M 5892 1882 
6428 James F 25  1883 
7118 James M 5223 1883 
8488 James F 33  1884 
9320 James M 5693 1884 
+0

看起來你的數據中有一些零而不是matplotlib改變它的行爲。在有問題的情況下,james_f ['births']的輸出是什麼? –

+0

'james_f ['births']'的輸出是什麼? –

+0

@TillHoffmann更新信息 – Rocketq

回答

2

關於性別的產量每年兩次的觀察不過濾:一個爲婦女和一男子。名叫'詹姆斯'的男人和女人的數量差別很大,使得情節顯得非常嘈雜。你有(至少)兩個選項:

(1)總結這樣的男人和女人的數量。

james = names[names.name == 'james'] 
years = [] 
births = [] 
for year, subset in james.groupby('year'): 
    years.append(year) 
    births.append(subset.births.sum()) 

plt.plot(years, births) 

有更多熊貓技能的人可能會把它寫成一行。

(2)爲男性和女性繪製兩條不同的線條。

james = names[names.name == 'james'] 
for sex, subset in james.groupby('sex'): 
    plt.plot(subset.year, subset.births, label=sex) 
plt.legend() 
+0

是的,你說得對,只需要總結這些值) – Rocketq

相關問題