我试图在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()
执行后,有两个问题。
如果我单独执行条形图代码和饼图代码,它们就可以正常工作。
以下是示例数据框:
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
这里可能出现什么问题?向matploltlib专家寻求帮助。
答案 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)