2016-11-07 60 views
0

我想在同一圖中使用matplotlib在餅圖上方顯示條形圖。代碼如下:MatPlotLib條形圖不會被生成,但試圖用餅圖在同一圖中顯示

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

df = pd.read_csv('stats.csv') 

agg_df = df.groupby(['Area','Sex']).sum() 

agg_df.reset_index(inplace=True) 

piv_df = agg_df.pivot(index='Area', columns='Sex', values='Count') 

plt.figure(1) 
plt.subplot(211) 
piv_df.plot.bar(stacked=True) 


df = pd.read_csv('stats.csv', delimiter=',', encoding="utf-8-sig") 

df=df.loc[df['"Year"']==2015] 

agg_df = df.groupby(['Sex']).sum() 

agg_df.reset_index(inplace=True) 

plt.subplot(212) 

plt.pie(agg_df["Count"],labels=agg_df["Sex"],autopct='%1.1f%%',startangle=90) 



plt.show() 

執行後,有兩個問題。

  1. 條形圖沒有被產生
  2. 的條形圖是圖1和餅圖是圖2

如果我執行條形圖代碼和餅圖代碼單獨地,他們工作得很好。

這裏是樣本數據框:

Year  Sex Area Count 
2015   W  Dhaka 6 
2015   M  Dhaka 3 
2015   W  Khulna 1 
2015   M  Khulna 8 
2014   M  Dhaka 13 
2014   W  Dhaka 20 
2014   M  Khulna 9 
2014   W  Khulna 6 
2013   W  Dhaka 11 
2013   M  Dhaka 2 
2013   W  Khulna 8 
2013   M  Khulna 5 
2012   M  Dhaka 12 
2012   W  Dhaka 4 
2012   W  Khulna 7 
2012   M  Khulna 1 

和條形圖輸出如下: empty barchart

什麼都不可能這裏的問題尋求matploltlib專家的幫助?

回答

2

你必須通過座標軸到pandas繪圖功能與ax參數,讓他們知道在哪裏畫圖片。 (在下面的代碼片段中,我使用了這個問題中的代碼,但是我刪除了計算我們用來繪製圖片的數據框的代碼,並用硬編碼的實際結果數據框替換了它們。由於這個問題是關於數字的,因此我們如何獲取這些數據並不重要dataframes,新版本更容易繁殖。)

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

piv_df = pd.DataFrame([[3, 6], [8, 1]], 
         columns=pd.Series(['M', 'W'], name='Sex'), 
         index=pd.Series(['Dhaka', 'Khulna'], name='Area')) 

fig = plt.figure() 
ax1 = fig.add_subplot(211) 
piv_df.plot.bar(stacked=True, ax=ax1) 

agg_df = pd.DataFrame({'Count': {0: 11, 1: 7}, 
         'Sex': {0: 'M', 1: 'W'}, 
         'Year': {0: 4030, 1: 4030}}) 
ax2 = fig.add_subplot(212) 

ax2.pie(agg_df["Count"], labels=agg_df["Sex"], autopct='%1.1f%%', 
     startangle=90) 

Resulting figure

+0

非常感謝你的幫助!它的工作 –

+0

然而,我可以重新定位餅圖有點低?併爲兩個地塊添加標題? –

+2

是的,你可以嘗試'fig.tight_layout()'使佈局更漂亮,'ax1.set_title(...)'爲軸添加標題。請看看http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples - 這是一個很好的教程,如何做出一個很好的可重現的熊貓相關問題。你的問題沒問題,但我必須用'pd.read_clipboard()'替換'pd.read_csv('stats.csv')',可能最好從問題中刪除所有熊貓計算的東西,因爲問題是關於圖片,而不是熊貓本身。這僅僅是對未來的建議。 –