如何使用 Python 中的 matplotlib 使条形图的一部分透明以取消隐藏其下方的填充区域?

How to make part of a bar plot transparent to unhide the filled region beneath it using matplotlib in Python?

我有一个 pandas 数据框 df 如下所示:

CSP Min Max
A   107.0   111.0
B   126.0   156.0

df.to_dict()如下:

{'Min': {'A': 107.0, 'B': 126.0}, 'Max': {'A': 111.0, 'B': 156.0}}

我想通过隐藏 0 和 Min 之间的部分并只显示 Min 和 Max 之间的部分来绘制 A 和 B 的条形图。因此,我选择将 Min 着色为白色。代码如下所示:

fig, ax = plt.subplots(figsize = (12, 8))

df.plot(kind = "bar",
        stacked = True, color = ["white", "orange"],
        ax = ax)

plt.legend([])

结果如图所示:

我还想绘制一个介于 55 和 148 之间的彩色范围。因此我使用了 plt.fill_between() 来达到这个目的。

fig, ax = plt.subplots(figsize = (12, 8))

ax.fill_between(x = [-1, 2],
                y1 = [55, 55],
                y2 = [148, 148],
                color = "gray",
                alpha = 0.15,
                )

plt.legend([])

看起来如下:

现在我想将这两个组合成一个图。我使用了以下代码:

fig, ax = plt.subplots(figsize = (12, 8))

df.plot(kind = "bar",
        stacked = True, color = ["white", "orange"],
        ax = ax)

ax.fill_between(x = [-1, 2],
                y1 = [55, 55],
                y2 = [148, 148],
                color = "gray",
                alpha = 0.15,
                )

plt.legend([])

结果图如图所示:

问题是白色条重叠了本不应重叠的灰色区域。那么,如何使条形图的底部透明,以便其下方的灰色区域仍然可见?

您可以使用 df['Min']:

bottom 选项一起绘制(无堆栈)df['Max']
df['Max'].plot(kind = "bar",
               color="orange",
               ax = ax,
               bottom=df['Min'])