首页 > 解决方案 > 在 matplotlib 中选择要绘制的子图

问题描述

我正在编写一个函数来显示给定数据框中每列的前 10 个值计数值的摘要。

假设我们有以下数据框:

df = pd.DataFrame({'a':[1, 2, 3, 1, 2, 3, 1, 4, 4, 5, 6],
                   'b':[2, 1, 1, 1, 1, 1, 1, 4, 4, 5, 6],
                   'c':[1, 2, 3, 1, 2, 5, 5, 5, 5, 5, 6]})

我希望能够计算列数,并创建一个大小合适的绘图网格

我使用元组创建并找到正确选择的方格:

l = len(df.columns)
tups = [(z, z, z**2) for z in range(1, 10)]
param = tups[min([i for i, x in enumerate([l <= tup[2] for tup in tups]) if x])]

现在我创建子图:

for i in range(1, l+1):
    plt.subplot(param[0], param[1], i)

我遇到的困难是我想为每个子图绘制每个子图,但是当我迭代时,它只是将每个子图设置为最后一个网格图,而将其他网格图留空。

for col in df.columns:
    df[col].value_counts()[:10].plot('bar')

标签: pythonpandasmatplotlib

解决方案


这肯定已经在其他地方得到了回答,但由于某些原因,我可能会再次在这里输入。

for i, col in enumerate(df.columns):
    ax = plt.subplot(param[0],param[1],i+1)
    df[col].value_counts()[:10].plot('bar', ax=ax)

推荐阅读