2016-11-07 55 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')',可能最好从问题中删除所有熊猫计算的东西,因为问题是关于图片,而不是熊猫本身。这仅仅是对未来的建议。 –