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

Python 如何在matplotlib中将数字转换为色标?,python,matplotlib,colors,Python,Matplotlib,Colors,我正在做一个条形图,我希望条形图的颜色根据颜色梯度从红色变为蓝色。我有一个数据框的尺寸,它告诉我每个条在红蓝标度上应该在哪里。我目前的方法是通过在RGB红色和蓝色之间进行线性插值,手动将这些值转换为RGB颜色,但我需要一种自动将数值转换为颜色比例的方法。我还需要有一个色条图例来帮助解释它。创建一个条形图并根据数据框中的值设置条形图的颜色非常简单。colormap和规范化实例有助于将值转换为颜色,这些颜色由matplotlib.Axes.bar的color参数理解。然后,使用与色条相同的规格化和颜

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

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

导入matplotlib.pyplot作为plt
导入matplotlib.colors
输入numpy作为np;np.random.seed(0)
作为pd进口熊猫
x=np.arange(12)
y=np.rand.rand(len(x))*51
c=np.rand.rand(len(x))*3+1.5
df=pd.DataFrame({“x”:x,“y”:y,“c”:c})
cmap=plt.cm.彩虹
norm=matplotlib.colors.Normalize(vmin=1.5,vmax=4.5)
图,ax=plt.子批次()
ax.bar(df.x,df.y,color=cmap(标准值(df.c.values)))
ax.set_xticks(df.x)
sm=plt.cm.ScalarMappable(cmap=cmap,norm=norm)
sm.set_数组([])#仅matplotlib<3.1需要
图颜色条(sm)
plt.show()
有关将自定义颜色贴图与条形图一起使用的信息,请参见

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([])  # only needed for matplotlib < 3.1
fig.colorbar(sm)

plt.show()