使用Matplotlib.pyplot的子绘图问题

时间:2020-04-09 17:53:45

标签: python matplotlib subplot

我的数据框:

import matplotlib.pyplot as plt
import pandas as pd

store_num = [2, 5, 7, 9, 11, 14, 16, 19, 23, 24]
store_location = ['Free Standing', 'Strip Mall', 'Strip Mall', 'Strip Mall', 'Strip Mall', 'Big Box', 'Strip Mall', 'Strip Mall', 'Big Box', 'Big Box']
sales = [870859, 365501, 581628, 522831, 336361, 352152, 543373, 628040, 414274, 302452]
df_copy_cat = pd.DataFrame({'store_num': store_num , 'store_location' : store_location ,'sales': sales})

我想使用子图制作EDA以显示最高的商店收入,最畅销的菜单等。 我创建以下代码,但结果显示2个图。 我在做什么错了?

plt.subplot(2,2,1)
df_copy_cat = df_copy[['store_num', 'sales', 'store_location']]
df_copy_cat = df_copy_cat.groupby(['store_num', 'store_location']).sales.sum()
df_copy_cat = df_copy_cat.reset_index().set_index('store_num')
df_copy_cat.sort_values(by = 'sales',ascending = False).plot(kind = 'bar')
plt.show()

Plot result is here

还绑定了以下代码:

plt.subplot(2,2,1)
df_copy_cat.sort_values(by = 'sales',ascending = False).plot(kind = 'bar')

plt.subplot(2,2,2)
df_copy_cat.groupby('store_location').sales.sum().sort_values(ascending = False).plot(kind='bar')

plt.subplot(2,2,3)
county_sales.sort_values(ascending = False).plot(kind='bar')

plt.subplot(2,2,4)
best_seller.plot(kind='bar')

结果是:

enter image description here

1 个答案:

答案 0 :(得分:0)

您使用熊猫的df.plot()方法仅作一个图。因此,您不需要plt.subplot(2,2,1)行。

另一方面,如果您想在一个图形中进行四个子图,则可以通过以下方式进行:

fig, ax = plt.subplots(2, 2)

df_copy_cat.sort_values(by = 'sales',ascending = False).plot(kind = 'bar', ax=ax[0, 0])
df_copy_cat.groupby('store_location').sales.sum().sort_values(ascending = False).plot(kind='bar', ax=ax[0, 1])
county_sales.sort_values(ascending = False).plot(kind='bar', ax=ax[1, 0])
best_seller.plot(kind='bar', ax=ax[1, 1])

请注意ax=...参数是通过df.plot()传递给matplotlib的。

很明显,pandas依赖于matplotlib的面向对象的界面,因此它比基于pyplot的方法要好。