You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib堆叠条形图如何设置类似pgfplots的独立边缘颜色?

在Matplotlib中为堆叠条形图设置与区块匹配的边缘颜色

当然可以实现!你想要的这种每个堆叠区块边缘颜色和自身填充色一致、类似pgfplots的效果,在Matplotlib里完全能做到,下面是具体的实现方法:

核心思路

你原来的代码里把edgecolor设成了固定值,所以所有堆叠区块的边缘都是同一种颜色。要实现匹配填充色的边缘,我们只需要遍历每个堆叠的条形区块,把每个区块的边缘颜色设置成它自己的填充色即可。

修改后的完整代码

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

test1 = np.array([51, 13.8, 15.5, np.NaN])
test2 = np.array([40.3, 30.4, 13.8, 15.5])
df = pd.DataFrame(dict(test1 = test1, test2 = test2), columns = ["test1","test2"]).T

# 绘制堆叠条形图,先暂时隐藏默认边缘(也可以不设,后面会覆盖)
ax = df.plot.barh(stacked=True, cmap="coolwarm", edgecolor='none')

# 遍历每个堆叠区块,设置边缘颜色与填充色一致
for patch in ax.patches:
    # 获取当前区块的填充颜色
    face_color = patch.get_facecolor()
    # 将边缘颜色设为填充色,同时可以调整线宽让边缘更清晰
    patch.set_edgecolor(face_color)
    patch.set_linewidth(1)  # 可选,根据需求调整边缘线粗细

plt.tight_layout()
plt.show()

关键细节说明

  • ax.patches包含了图中所有的条形元素(每个堆叠的小区块都是一个独立的patch),遍历它们就能逐个设置样式。
  • 用patch.get_facecolor()获取当前区块的填充色,再通过patch.set_edgecolor()把边缘色设成一样的,完美实现颜色匹配。
  • 可以通过set_linewidth()调整边缘线的粗细,让效果更贴近你想要的pgfplots风格;如果觉得边缘太明显,也可以调小这个值。
  • 代码里的NaN值会被Matplotlib自动忽略,不会生成空的区块,所以不用担心空值影响样式设置。

内容的提问来源于stack exchange,提问作者komodovaran_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:46:04