提问者:小点点

如何在处理数据帧的切片时使子图正确工作


我试图绘制4个子图,将一个大的数据帧分成更小的切片,这样柱状图就不会太难读了。 我已经将这些切片分开,并将它们分配给各个数据帧。 我正在处理的数据框架如下所示(此数据框架是多索引数据帧(df.unstack())的解堆栈输出:

Age Range   40-49  50-59  60-69  70-79  80+
County                                     
Allen         NaN    NaN    NaN    NaN  1.0
Athens        NaN    NaN    1.0    NaN  NaN
Belmont       NaN    1.0    NaN    1.0  1.0
Clark         NaN    NaN    NaN    1.0  NaN
Columbiana    NaN    NaN    NaN    1.0  NaN
Cuyahoga      NaN    3.0    1.0    7.0  3.0
Defiance      NaN    NaN    NaN    NaN  1.0
Franklin      NaN    NaN    4.0    1.0  3.0
Greene        NaN    NaN    1.0    NaN  NaN
Hamilton      NaN    1.0    2.0    1.0  7.0
Hocking       NaN    NaN    NaN    1.0  NaN
Knox          NaN    NaN    NaN    NaN  1.0
Lorain        NaN    NaN    NaN    2.0  NaN
Lucas         NaN    NaN    1.0    NaN  2.0
Madison       1.0    NaN    NaN    NaN  NaN
Mahoning      NaN    1.0    NaN    1.0  2.0
Medina        NaN    1.0    NaN    NaN  NaN
Miami         NaN    NaN    1.0    NaN  1.0
Pickaway      NaN    NaN    NaN    1.0  NaN
Portage       1.0    NaN    NaN    2.0  NaN
Ross          NaN    NaN    NaN    1.0  NaN
Seneca        NaN    NaN    NaN    NaN  1.0
Shelby        NaN    NaN    NaN    NaN  1.0
Stark         NaN    NaN    NaN    1.0  NaN
Summit        NaN    NaN    NaN    1.0  NaN
Trumbull      NaN    NaN    NaN    1.0  1.0
Warren        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个答案

匿名用户

阅读后请参阅:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.subplot.html

一个3位整数或三个单独的整数来描述子图的位置。 如果三个整数依次为nrows,ncols和index,则子图将取具有nrows行和ncols列的网格上的索引位置。 索引从左上角的1开始,向右增加。

pos是一个三位整数,其中第一位是行数,第二位是列数,第三位是子图的索引。 即图add_subplot(235)与图add_subplot(2,3,5)相同。 请注意,所有整数必须小于10,此表单才能工作。

行和列的数目在每种情况下如何是2和2