为了账号安全,请及时绑定邮箱和手机立即绑定

使用数据框的切片时如何使子图正常工作

使用数据框的切片时如何使子图正常工作

心有法竹 2023-03-16 10:58:43
我正在尝试绘制 4 个子图,将大数据框分成较小的部分,这样条形图就不会过于庞大和难以阅读。我已将切片分开并将它们分别分配给单独的数据帧。我正在使用的数据框如下所示(此数据框是多索引数据框 (df.unstack()) 的 unstack 输出):Age Range   40-49  50-59  60-69  70-79  80+County                                     Allen         NaN    NaN    NaN    NaN  1.0Athens        NaN    NaN    1.0    NaN  NaNBelmont       NaN    1.0    NaN    1.0  1.0Clark         NaN    NaN    NaN    1.0  NaNColumbiana    NaN    NaN    NaN    1.0  NaNCuyahoga      NaN    3.0    1.0    7.0  3.0Defiance      NaN    NaN    NaN    NaN  1.0Franklin      NaN    NaN    4.0    1.0  3.0Greene        NaN    NaN    1.0    NaN  NaNHamilton      NaN    1.0    2.0    1.0  7.0Hocking       NaN    NaN    NaN    1.0  NaNKnox          NaN    NaN    NaN    NaN  1.0Lorain        NaN    NaN    NaN    2.0  NaNLucas         NaN    NaN    1.0    NaN  2.0Madison       1.0    NaN    NaN    NaN  NaNMahoning      NaN    1.0    NaN    1.0  2.0Medina        NaN    1.0    NaN    NaN  NaNMiami         NaN    NaN    1.0    NaN  1.0Pickaway      NaN    NaN    NaN    1.0  NaNPortage       1.0    NaN    NaN    2.0  NaNRoss          NaN    NaN    NaN    1.0  NaNSeneca        NaN    NaN    NaN    NaN  1.0Shelby        NaN    NaN    NaN    NaN  1.0Stark         NaN    NaN    NaN    1.0  NaNSummit        NaN    NaN    NaN    1.0  NaNTrumbull      NaN    NaN    NaN    1.0  1.0Warren        NaN    1.0    NaN    NaN  2.0我使用以下代码将它们分成 4 个相等的切片并将它们分配给各个数据帧:df1 = df.unstack()[:7]df2 = df.unstack()[7:14]df3 = df.unstack()[14:21]df4 = df.unstack()[21:]然后我使用以下代码将它们绘制为子图:plt.subplot(221)df1.plot(kind='bar')plt.subplot(222)df2.plot(kind='bar')plt.subplot(223)df3.plot(kind='bar')plt.subplot(224)df4.plot(kind='bar')plt.show()当我运行此代码时,它会输出四个空白子图(它们采用 4 行 1 列格式),然后在这四个之后它仅绘制最后一个子图 (df4)。如果我注释掉 plt.subplot() 行,则绘图会正确输出。我以前以类似的格式绘制过类似的东西,所以我不确定为什么它不会以相同的方式运行,这可能与使用切片有关吗?
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

要在 matplotlib 子图上绘制 pandas.DataFrame,您需要:

  1. 将调用返回的轴存储plt.subplot()到一个变量中,然后您可以

  2. 传递这个轴来pandas.DataFrame.plot()调用

喜欢:

ax1 = plt.subplot(221)
df1.plot(kind='bar', ax = ax1)

因为你没有这样做,所以每个新的plt.subplot()调用都会创建新的数字并覆盖调用创建的数字pandas.DataFrame.plot(),因此你会得到 4 个空图的数字和一个来自df4.plot(kind='bar')

你应该做什么:

ax1 = plt.subplot(221)

df1.plot(kind='bar', ax = ax1)


ax2 = plt.subplot(222)

df2.plot(kind='bar', ax = ax2)


ax3 = plt.subplot(223)

df3.plot(kind='bar', ax = ax3)


ax4 = plt.subplot(224)

df4.plot(kind='bar', ax = ax4)


plt.show()

使用 DataFrame 的前两列的示例输出:

//img1.sycdn.imooc.com//6412861700013bf103680248.jpg

查看完整回答
反对 回复 2023-03-16
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号