让每个直方图箱具有不同的颜色

Luc*_*uca 1 python matplotlib histogram pandas seaborn

我绘制了一个直方图,并希望每个垃圾箱都有不同的颜色。现在我收到错误消息: “‘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);
Run Code Online (Sandbox Code Playgroud)

Rut*_*ies 5

颜色关键字仅适用于您想要一次绘制多个数据集(=直方图)的情况。它不能用于单独为条形着色。

但是,您可以从命令捕获结果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)])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

或基于值的颜色:

cmap = plt.cm.viridis

for i, (cnt, value, bar) in enumerate(zip(cnts, values, bars)):
    bar.set_facecolor(cmap(cnt/cnts.max()))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述