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

如何为Matplotlib单个水平条形图添加平滑过渡的发散配色方案

单水平条形发散渐变配色实现方案

纯Matplotlib实现

核心思路是先绘制发散渐变图层,再用水平条形作为裁剪区域,仅保留条形范围内的渐变显示。

import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

# 自定义发散配色,可根据需求替换颜色列表,当前为左蓝-中白-右红的经典发散色
diverge_cmap = LinearSegmentedColormap.from_list('custom_diverge', ['#2166ac', 'white', '#b2182b'])

plt.figure(figsize=(4, 1))
# 绘制覆盖x轴[-1,1]区间的渐变图层
gradient_layer = plt.imshow(
    [[0, 1]], 
    aspect='auto', 
    cmap=diverge_cmap, 
    extent=[-1, 1, -0.5, 0.5]
)
# 绘制水平条形作为裁剪模板,填充色设为透明
bar = plt.barh(
    ['my_value'], 
    height=0.1, 
    width=[-1, 1], 
    align='center', 
    color='none'
)[0]
# 把渐变图层裁剪到仅条形区域可见
gradient_layer.set_clip_path(bar)
# 保留原有辅助竖线
plt.axvline(x=0.8, color='black')
# 调整y轴范围避免显示异常
plt.ylim(-0.5, 0.5)
plt.show()

Seaborn实现方案

可以直接调用Seaborn内置的成熟发散调色板,无需自定义色值:

import matplotlib.pyplot as plt
import seaborn as sns

plt.figure(figsize=(4, 1))
# 直接使用Seaborn内置发散调色板,可替换为coolwarm、RdBu_r等其他发散色系
diverge_cmap = sns.color_palette("vlag", as_cmap=True)

gradient_layer = plt.imshow(
    [[0, 1]], 
    aspect='auto', 
    cmap=diverge_cmap, 
    extent=[-1, 1, -0.5, 0.5]
)
bar = plt.barh(
    ['my_value'], 
    height=0.1, 
    width=[-1, 1], 
    align='center', 
    color='none'
)[0]
gradient_layer.set_clip_path(bar)
plt.axvline(x=0.8, color='black')
plt.ylim(-0.5, 0.5)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:54:04