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_
相关产品推荐
相关产品推荐

