如何在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
相关产品推荐
相关产品推荐

