首页 > 解决方案 > 如何在单独的数字上绘制 Pandas Dataframe 列?

问题描述

我尝试采用一个有 57 列的 Pandas 数据框,并将它们绘制在一个条形图上,每个图有 3 列。原因是数据的变化和列的长度使得在许多图中很难看到数据。每个子图绘制多列不是一个选项,因此每个图都必须在输出大小处可见。鉴于我发现每个图 3 个子图看起来最好的数据。这是我绘制数据框的脚本:

fig, ax = plt.subplots(nrows=len(df.columns), ncols=1, sharex=True, sharey=True)
yscale = np.ceil(df.abs().select_dtypes(include=[np.number]).values.max())
plt.yscale('symlog')
plt.ylim(-yscale, yscale)
t = list(df.columns.values)
n = 0
for i in df:
    df['positive'] = df[i] > 0
    df[i].plot.bar(ax=ax[n], rot=0, width=1.0, legend=False, position=0, color=df.positive.map({True: 'g', False: 'r'}))
    ax[n].set_title(t[n])
    ax[n].axhline(y=0, linewidth=1, color='k')
    ax[n].tick_params(which='major', axis='x', length=2)
    ax[n].tick_params(which='major', axis='y', length=6)
    n += 1
plt.tight_layout()
plt.show()

将数据帧拆分为几个较小的数据帧最简单吗?我唯一担心的是每个数据帧会有不同数量的列和不同的样本。

标签: pythonpandasmatplotlib

解决方案


这似乎是你想要的

for i in range(19):
    df.iloc[:,i*3:i*3+3].plot.bar(subplots=True,
                                  legend=None)

这给出了与此类似的 19 个图:

在此处输入图像描述


推荐阅读