如何在Matplotlib柱状图中为不同区域的柱子分配随机颜色
解决方案:按区域自动分配颜色精简Matplotlib柱状图代码
你可以通过提取唯一区域、自动生成颜色并循环遍历的方式彻底简化代码,避免重复的mask和bar调用:
核心优化思路:
- 自动提取所有唯一区域:无需手动枚举,直接从数据中获取所有不同区域值
- 生成对应数量的专属颜色:用随机RGB或内置配色映射生成不重复颜色
- 循环批量绘制:一次遍历完成所有区域的筛选与柱状图绘制
精简后的代码:
import matplotlib.pyplot as plt import numpy as np plt.figure(figsize=(20,4)) # 获取数据中所有唯一区域 regions = top_cust['region'].unique() # 生成对应数量的随机RGB颜色(每个颜色是0-1之间的RGB值) colors = [np.random.rand(3,) for _ in regions] # 循环遍历每个区域和对应颜色 for region, color in zip(regions, colors): mask = top_cust['region'] == region plt.bar(top_cust.loc[mask, 'customer_name_first'], top_cust.loc[mask, 'profit'], color=color) plt.title('Profits By Customer') plt.xlabel('Customer') plt.ylabel('Profits in Dollars') plt.show()
额外优化建议:
- 若想要更协调的配色,可改用Matplotlib内置配色映射替代随机色:
from matplotlib import cm # 从内置配色表中生成对应数量的颜色 cmap = cm.get_cmap('tab20', len(regions)) colors = [cmap(i) for i in range(len(regions))]
- 添加图例增强可读性:在
plt.bar中加入label=region参数,然后在plt.show()前调用plt.legend()
内容的提问来源于stack exchange,提问作者Adam Turner
相关产品推荐
相关产品推荐

