我正在嘗試繪制 4 個子圖,將大數(shù)據(jù)框分成較小的部分,這樣條形圖就不會過于龐大和難以閱讀。我已將切片分開并將它們分別分配給單獨的數(shù)據(jù)幀。我正在使用的數(shù)據(jù)框如下所示(此數(shù)據(jù)框是多索引數(shù)據(jù)框 (df.unstack()) 的 unstack 輸出):Age Range 40-49 50-59 60-69 70-79 80+County Allen NaN NaN NaN NaN 1.0Athens NaN NaN 1.0 NaN NaNBelmont NaN 1.0 NaN 1.0 1.0Clark NaN NaN NaN 1.0 NaNColumbiana NaN NaN NaN 1.0 NaNCuyahoga NaN 3.0 1.0 7.0 3.0Defiance NaN NaN NaN NaN 1.0Franklin NaN NaN 4.0 1.0 3.0Greene NaN NaN 1.0 NaN NaNHamilton NaN 1.0 2.0 1.0 7.0Hocking NaN NaN NaN 1.0 NaNKnox NaN NaN NaN NaN 1.0Lorain NaN NaN NaN 2.0 NaNLucas NaN NaN 1.0 NaN 2.0Madison 1.0 NaN NaN NaN NaNMahoning NaN 1.0 NaN 1.0 2.0Medina NaN 1.0 NaN NaN NaNMiami NaN NaN 1.0 NaN 1.0Pickaway NaN NaN NaN 1.0 NaNPortage 1.0 NaN NaN 2.0 NaNRoss NaN NaN NaN 1.0 NaNSeneca NaN NaN NaN NaN 1.0Shelby NaN NaN NaN NaN 1.0Stark NaN NaN NaN 1.0 NaNSummit NaN NaN NaN 1.0 NaNTrumbull NaN NaN NaN 1.0 1.0Warren NaN 1.0 NaN NaN 2.0我使用以下代碼將它們分成 4 個相等的切片并將它們分配給各個數(shù)據(jù)幀:df1 = df.unstack()[:7]df2 = df.unstack()[7:14]df3 = df.unstack()[14:21]df4 = df.unstack()[21:]然后我使用以下代碼將它們繪制為子圖:plt.subplot(221)df1.plot(kind='bar')plt.subplot(222)df2.plot(kind='bar')plt.subplot(223)df3.plot(kind='bar')plt.subplot(224)df4.plot(kind='bar')plt.show()當我運行此代碼時,它會輸出四個空白子圖(它們采用 4 行 1 列格式),然后在這四個之后它僅繪制最后一個子圖 (df4)。如果我注釋掉 plt.subplot() 行,則繪圖會正確輸出。我以前以類似的格式繪制過類似的東西,所以我不確定為什么它不會以相同的方式運行,這可能與使用切片有關嗎?
1 回答

喵喵時光機
TA貢獻1846條經(jīng)驗 獲得超7個贊
要在 matplotlib 子圖上繪制 pandas.DataFrame,您需要:
將調(diào)用返回的軸存儲
plt.subplot()
到一個變量中,然后您可以傳遞這個軸來
pandas.DataFrame.plot()
調(diào)用
喜歡:
ax1 = plt.subplot(221) df1.plot(kind='bar', ax = ax1)
因為你沒有這樣做,所以每個新的plt.subplot()
調(diào)用都會創(chuàng)建新的數(shù)字并覆蓋調(diào)用創(chuàng)建的數(shù)字pandas.DataFrame.plot()
,因此你會得到 4 個空圖的數(shù)字和一個來自df4.plot(kind='bar')
你應該做什么:
ax1 = plt.subplot(221)
df1.plot(kind='bar', ax = ax1)
ax2 = plt.subplot(222)
df2.plot(kind='bar', ax = ax2)
ax3 = plt.subplot(223)
df3.plot(kind='bar', ax = ax3)
ax4 = plt.subplot(224)
df4.plot(kind='bar', ax = ax4)
plt.show()
使用 DataFrame 的前兩列的示例輸出:
添加回答
舉報
0/150
提交
取消