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

如何基于轴字符串值为Matplotlib水平条形图设置分组颜色?

如何为水平条形图的特定国家(字符串轴)设置分组颜色

嘿,我刚好碰到过类似的需求!你现在的问题是要给字符串轴的条形图按国家组设置不同颜色,其实不用纠结axhspan或者掩码,直接给每个条形指定对应颜色就简单多了,我给你改改代码,顺便讲清楚思路:

核心思路

我们可以先建立一个国家-颜色的映射字典,然后根据你的国家列表生成对应的颜色列表,最后把这个颜色列表传给barh的color参数就行。如果国家数量多的话,按组来管理颜色会更清晰易维护。

修改后的完整代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 模拟数据
country_names = ['usa','brazil','canada'] 
country_rank = pd.Series(np.random.randn(3), index=country_names) 

plt.rcdefaults() 
fig, ax = plt.subplots(figsize=(10,15)) 

y_pos = np.arange(len(country_names)) 
error = np.zeros(len(country_names)) 

# 方式1:直接单个国家映射(适合少量国家)
color_map = {
    'usa': 'yellow',
    'canada': 'yellow',
    'brazil': 'green'
    # 后续可扩展:比如'france':'blue', 'uk':'blue', 'japan':'orange'...
}

# 方式2:按组管理(适合50个国家的场景,更易维护)
# country_groups = {
#     'north_america': {'countries': ['usa', 'canada'], 'color': 'yellow'},
#     'south_america': {'countries': ['brazil'], 'color': 'green'},
#     'europe': {'countries': ['france', 'uk'], 'color': 'blue'},
#     'asia': {'countries': ['japan', 'hong_kong'], 'color': 'orange'}
# }
# # 从分组生成颜色映射字典
# color_map = {}
# for group in country_groups.values():
#     for country in group['countries']:
#         color_map[country] = group['color']

# 生成每个条形对应的颜色列表
colors = [color_map[country] for country in country_names]

# 绘制条形图,传入颜色列表替代统一的'green'
ax.barh(y_pos, country_rank, color=colors, xerr=error, align='center', ecolor='black') 

ax.set_yticks(y_pos) 
ax.set_yticklabels(country_names) 
ax.invert_yaxis()  # 标签从上到下读取
ax.set_xlabel('Strategy Score') 
ax.set_title('Global Large Cap Index Allocation Model') 
ax.set_yticklabels(country_names, ha='left', minor=False) 
ax.yaxis.tick_right() 
plt.tight_layout() 
plt.show()

为什么这个方法可行?

  • 不管y轴是字符串还是数值,每个条形都对应y_pos里的一个位置,我们通过颜色列表把每个位置的颜色精准对应到国家,比用axhspan(更适合数值区间)更直接精准。
  • 按组管理的方式适配你有50个国家的场景,只需要维护分组字典,不用逐个编写每个国家的颜色,后期调整分组或颜色也更高效。

你可以根据自己的实际分组需求调整color_map或者country_groups里的内容,肯定能达到你要的分组突出显示效果!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:17:50