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

如何在Python中为柱状图每个条形添加渐变色?附现有代码

如何改进Matplotlib代码实现目标图表效果

当前代码及效果

现有代码生成的是蓝色柱状图,已隐藏Y轴刻度标签,图表边框为蓝色,具体代码如下:

颜色配置

# 条形蓝色
rb=0
gb=80
bb=141
color_bar=rgb_to_hex(rb, gb, bb)

# 线条橙色
rl=237
gl=125
bl=49
color_line=rgb_to_hex(rl, gl, bl)

# 白色
rbra=255
gbra=255
bbra=255
color_text_table=rgb_to_hex(rbra,gbra,bbra)

样式与绘图配置

# 字体大小与线条宽度
fontsize=18
linewidth=5

# 图像尺寸配置
plt.rcParams['figure.figsize']=(20,10)

# 修改图表边框颜色或其他参数
plt.rc('axes',edgecolor=color_bar, lw=linewidth-2.5)

# 创建柱状图
width_bar=0.35
lim_sup=grouped['OID_MEM_ID'].max()+(grouped['OID_MEM_ID'].max()-grouped['OID_MEM_ID'].min())*2
ax = grouped.plot('Mês Ano','OID_MEM_ID',
color=color_bar,
kind ='bar',
fontsize=fontsize+2,
legend=False,
width=width_bar,
ylim=(0,lim_sup))

# 隐藏Y轴刻度标签
ax.axes.yaxis.set_ticklabels([])

目标效果说明

期望实现柱状图叠加橙色折线图的组合样式,同时在每个柱子顶部显示对应数值,折线带有数据标记点,整体视觉更清晰直观。

改进代码方案

以下是针对目标效果的代码优化:

# 颜色配置(保留原有设置)
rb=0
gb=80
bb=141
color_bar=rgb_to_hex(rb, gb, bb)

rl=237
gl=125
bl=49
color_line=rgb_to_hex(rl, gl, bl)

rbra=255
gbra=255
bbra=255
color_text_table=rgb_to_hex(rbra,gbra,bbra)

# 基础样式配置
fontsize=18
linewidth=5
plt.rcParams['figure.figsize']=(20,10)
plt.rc('axes',edgecolor=color_bar, lw=linewidth-2.5)

# 创建柱状图
width_bar=0.35
lim_sup=grouped['OID_MEM_ID'].max()+(grouped['OID_MEM_ID'].max()-grouped['OID_MEM_ID'].min())*2
ax = grouped.plot('Mês Ano','OID_MEM_ID',
                  color=color_bar,
                  kind='bar',
                  fontsize=fontsize+2,
                  legend=False,
                  width=width_bar,
                  ylim=(0,lim_sup))

# 1. 叠加橙色折线图
ax2 = ax.twinx()
ax2.plot(ax.get_xticks(), grouped['OID_MEM_ID'], color=color_line, linewidth=linewidth, marker='o', markersize=10)
ax2.set_ylim(0, lim_sup)
# 隐藏右侧Y轴刻度标签(按需保留)
ax2.yaxis.set_ticklabels([])

# 2. 在柱子顶部添加数值标签
for p in ax.patches:
    height = p.get_height()
    ax.text(p.get_x() + p.get_width()/2., height,
            f'{int(height)}',
            ha='center', va='bottom', fontsize=fontsize, color=color_text_table)

# 3. 保留原Y轴刻度隐藏逻辑
ax.yaxis.set_ticklabels([])

# 可选:优化X轴标签样式
ax.set_xlabel('Mês Ano', fontsize=fontsize+2)

改进说明

  • 叠加折线图:通过twinx()创建双轴,保证折线与柱状图的X轴对齐,添加标记点增强折线辨识度;
  • 添加数据标签:遍历每个柱状图补丁,在顶部显示对应数值,使用白色文字确保在蓝色柱子上的可读性;
  • 样式统一:保留原有配色与尺寸设置,按需调整X轴标签样式,保证整体视觉协调。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:39:56