尝试使用同一图中的饼图显示时,未生成MatPlotLib条形图

时间:2016-11-07 12:15:02

标签: python pandas matplotlib

我试图在SAME图中使用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中
  3. 如果我单独执行条形图代码和饼图代码,它们就可以正常工作。

    以下是示例数据框:

    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专家寻求帮助。

1 个答案:

答案 0 :(得分:2)

您必须使用pandas参数将轴传递给ax绘图功能,以便让他们知道在哪里绘制图片。 (在下面的代码片段中,我使用了问题中的代码,但我删除了计算数据帧的代码,用于绘制图片并将其替换为硬编码的实际结果数据帧。由于这个问题是关于数字,我们如何获得这些数据并不重要数据帧,新版本更容易重现。)

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