我试图绘制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()行,则图将正确输出。 我以前用类似的格式绘制过类似的图,所以我不确定为什么这不会以同样的方式运行,这可能与使用切片有关吗?
阅读后请参阅: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