首页 > 解决方案 > 如何使用 matplotlib 绘制复杂的条形图——具有多行条形的多个子图?

问题描述

我有一个示例数据框,如下所示:

import pandas as pd

df = pd.DataFrame(np.random.randint(
    0, 10, size=(1000, 11)), columns=list('ABCDEFGHIJK'))

所需但未抛光的输出如下所示:

数据框中每一列的数据被绘制为带有五行条形的子图。

在此处输入图像描述

我更喜欢使用 matplotlib,因为我可以相对轻松地使图表看起来不错。但它的性能似乎相当缓慢。

标签: pythonpandasmatplotlibplot

解决方案


您可以使用bottom参数 ofbar来偏移各个行。
以下未优化的示例演示了这种方法:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.DataFrame(np.random.randint(0, 10, size=(1000, 11)), columns=list('ABCDEFGHIJK'))

fig = plt.figure()

for i,c in enumerate(df.columns):
    ax = fig.add_subplot(3, 4, i+1)
    for x,h,b in zip((df.index.to_numpy() % 200).reshape(-1, 200), df[c].to_numpy().reshape(-1, 200), (df.index.to_numpy() // 200 * 10).reshape(-1, 200)):
        ax.set_title(c)
        ax.bar(x, h, bottom=b, color='k' )

在此处输入图像描述


推荐阅读