python - 使每个直方图箱具有不同的颜色
问题描述
我绘制了一个直方图,并希望每个箱都有不同的颜色。现在我收到错误消息: “'color' 关键字参数每个数据集必须有一种颜色,但提供了 1 个数据集和 10 种颜色”
decades = np.arange(1910, 2020, 10)
colors = ['aqua', 'red', 'gold', 'royalblue', 'darkorange', 'green', 'purple', 'cyan', 'yellow', 'lime']
plt.figure(figsize=(12,7))
plt.hist(df.Year, bins=decades, color=colors)
plt.xticks(decades);
解决方案
颜色关键字仅适用于您想要一次绘制多个数据集(=直方图)的情况。它不能用于单独为条着色。
但是,您可以从命令中捕获结果hist
,并遍历结果以设置颜色。这允许您在需要时使用值或 bin 信息(例如根据值着色),但可以使用您的示例简单地分配唯一颜色(基于顺序)。
例如:
import matplotlib.pyplot as plt
import numpy as np
decades = np.arange(1910, 2020, 10)
data = np.random.gamma(4, scale=0.2, size=1000)*110+1910
colors = ['aqua', 'red', 'gold', 'royalblue', 'darkorange', 'green', 'purple', 'cyan', 'yellow', 'lime']
fig, ax = plt.subplots(figsize=(8,4), facecolor='w')
cnts, values, bars = ax.hist(data, edgecolor='k', bins=decades)
ax.set_xticks(decades)
for i, (cnt, value, bar) in enumerate(zip(cnts, values, bars)):
bar.set_facecolor(colors[i % len(colors)])
或基于值的颜色:
cmap = plt.cm.viridis
for i, (cnt, value, bar) in enumerate(zip(cnts, values, bars)):
bar.set_facecolor(cmap(cnt/cnts.max()))
推荐阅读
- jenkins - Jenkinsfile 失败一步并继续其余的
- android - 将数据从另一个活动发送到一个活动的片段?
- dart - 如果json数据有转义字符以响应dart或flutter,如何解析它?
- amazon-web-services - Aws 私有/公共 vpc/nat 网关 multiaz 模式
- algorithm - 道路关键点检测算法
- xml - 在 groovy 中验证 xml 文档
- c# - 如何在没有 foreach 的情况下获得模型“值”?
- html - Bootstrap:表单控件无响应
- visual-studio - 在 Visual Studio 2017 和 ssis 中苦苦挣扎
- java - 我们应该在 Spring Boot 中为存储库层编写单元测试和集成测试吗?