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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:33:27