如何在matplotlib中将数字转换为色阶?

时间:2017-03-24 21:50:50

标签: python matplotlib colors

我正在制作条形图,我希望条形图的颜色根据颜色渐变从红色变为蓝色。我有一个数据框的维度,告诉我在每个条形应该是红蓝色的比例。我目前的方法是通过RGB红色和蓝色之间的线性插值手动将这些值转换为RGB颜色,但我想要一种自动方式将我的数值转换为色标。我还需要能够有一个颜色条图例来帮助解释它。

1 个答案:

答案 0 :(得分:22)

创建条形图并根据数据框中的值设置条形颜色非常简单。色彩映射和规范化实例有助于将值转换为颜色,color matplotlib.Axes.bar参数可以理解这些颜色。然后使用与条形相同的标准化和色彩映射从ScalarMappable创建颜色条。

enter image description here

import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np; np.random.seed(0)
import pandas as pd

x = np.arange(12)
y = np.random.rand(len(x))*51
c = np.random.rand(len(x))*3+1.5
df = pd.DataFrame({"x":x,"y":y,"c":c})

cmap = plt.cm.rainbow
norm = matplotlib.colors.Normalize(vmin=1.5, vmax=4.5)

fig, ax = plt.subplots()
ax.bar(df.x, df.y, color=cmap(norm(df.c.values)))
ax.set_xticks(df.x)

sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
fig.colorbar(sm)

plt.show()

要使用带条形图的自定义色彩映射,请参阅Barplot colored according a colormap?