【问题标题】:How to both split and stack bars in a histogram, only hatching the lower bars?如何在直方图中拆分和堆叠条形图,仅对较低的条形进行孵化?
【发布时间】:2020-05-05 03:29:40
【问题描述】:

假设我有以下 6 个数组:

A0 = np.array([0,2,5,6,3,1,9,3,5,7])
B0 = np.array([5,1,6,7,3,8,2,3,4,7,1])
C0 = np.array([3,5,7,7,8,5,5,6,7,1,6])

A1 = np.array([2,2,6,7,4])
B1 = np.array([1,6,1,4,0])
C1 = np.array([5,3,3,7,0])

我可以在直方图中绘制前三个,将三个数组分成三个小条(A0 为蓝色,B0 为黄色,C0 为绿色)。

plt.hist([A0,B0,C0])
plt.show()

我还可以堆叠两个数组的直方图;例如

plt.hist([A0,A1], stacked=True)
plt.show()

现在我希望将这两种效果结合起来:我想创建一个直方图,将数组 A0、B0 和 C0 分别绘制成这些较小的条形图,然后我想将数组 A1、B1 和 C1 的直方图堆叠起来分别位于A0、B0和C0的直方图之上。

最好,我还希望对数组 A1、B1 和 C1 加上阴影线,例如

plt.hist(A1, hatch='//')

而 A0、B0 和 C0 只是定期填充而不是阴影。

【问题讨论】:

    标签: python matplotlib histogram


    【解决方案1】:

    一种方法是首先为[A0+A1, B0+B1, C0+C1] 绘制一个分割直方图。这些条将具有与堆叠条相同的高度。然后,在第二遍中,[A1, B1, C1] 的分割直方图被绘制在同一位置。在这两种情况下使用相同的bins 很重要。请注意,这种方法不适用于“密度”直方图。

    下面的代码使用“配对”颜色,在较深的版本中绘制上部,在较浅的版本中绘制下部并加上阴影。

    import numpy as np
    from matplotlib import pyplot as plt
    
    A0 = np.array([0,2,5,6,3,1,9,3,5,7])
    B0 = np.array([5,1,6,7,3,8,2,3,4,7,1])
    C0 = np.array([3,5,7,7,8,5,5,6,7,1,6])
    A1 = np.array([2,2,6,7,4])
    B1 = np.array([1,6,1,4,0])
    C1 = np.array([5,3,3,7,0])
    
    # bar_colors = ['C0', 'C1', 'C2']
    bar_colors_0 = plt.cm.tab20c.colors[0:12:4]
    bar_colors_1 = plt.cm.tab20c.colors[1:12:4]
    
    _, bins, _ = plt.hist([np.concatenate([A0, A1]),np.concatenate([B0, B1]),np.concatenate([C0, C1])], color=bar_colors_0)
    
    plt.hist([A1,B1,C1], bins=bins, hatch='//', color=bar_colors_1)
    
    plt.show()
    

    【讨论】:

    • 这能回答你的问题吗?还是你需要别的东西?
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多