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

如何在Seaborn条形图/计数图中为每个条形添加垂直颜色渐变

实现Seaborn Barplot/Countplot的垂直渐变条形效果

我明白你想要把Seaborn countplot里的条形从默认的纯色(或同色系深浅区分)改成每个条形内部从上到下的垂直线性渐变。Seaborn本身没有直接提供渐变填充的参数,不过我们可以结合Matplotlib的渐变功能来实现这个效果,下面是具体的步骤和完整代码:

完整实现代码

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.patches import Rectangle

sns.set(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
titanic = sns.load_dataset("titanic")

# 先绘制基础的countplot,获取轴对象
ax = sns.countplot(x="deck", data=titanic)
bars = ax.patches  # 获取所有条形的patch对象

# 定义垂直渐变的颜色范围:从上到下从浅绿过渡到深绿
start_color = "#e6f9e6"
end_color = "#2d6a4f"

# 遍历每个条形,替换为垂直渐变填充
for bar in bars:
    # 获取条形的位置、宽度和高度
    x_pos, y_pos, bar_width, bar_height = bar.get_x(), bar.get_y(), bar.get_width(), bar.get_height()
    
    # 创建一个新的矩形patch,用来承载渐变效果
    gradient_bar = Rectangle((x_pos, y_pos), bar_width, bar_height, facecolor="none")
    ax.add_patch(gradient_bar)
    
    # 设置垂直线性渐变:方向是从顶部(0,1)到底部(0,0)
    gradient_bar.set_facecolor(plt.LinearGradient((0, 1), (0, 0), colors=[start_color, end_color]))

# 可选:添加标题让图表更清晰
plt.title("Titanic Deck Passenger Count (Vertical Gradient Bars)")
plt.show()

代码说明

  1. 基础绘图:先正常绘制Seaborn的countplot,获取轴对象和所有条形的patch。
  2. 渐变定义:指定渐变的起始(浅绿)和结束(深绿)颜色,你可以根据需求替换成其他色系。
  3. 替换条形:对每个条形,创建一个新的矩形patch,然后给它设置垂直方向的线性渐变——(0,1)到(0,0)的坐标表示渐变沿着y轴从上到下延伸。
  4. 覆盖原条形:把渐变矩形添加到轴上,会自动覆盖原来的纯色条形。

如果想让不同条形的渐变色调和原Greens_d palette的深浅匹配,也可以给每个条形设置不同的渐变颜色范围,只需要在循环里根据条形的索引调整start_color和end_color即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:28:03