我有一个包含两列的 df:
我还有一个我自己制作的具有四种不同颜色的颜色图,它是一个 ListedColorMap 对象。
我想创建一个条形图,其中 x 轴为四个类别(星期几),y 轴为它们对应的值。同时,我希望每个条使用我的颜色图都有不同的颜色。
这是我用来构建条形图的代码:
def my_barchart(my_df, my_cmap):
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(my_df['days'], my_df['y'], color=my_cmap)
return fig
但是,我收到以下错误:“'ListedColormap' 类型的对象没有 len()”,所以我似乎没有正确使用 my_cmap。如果我从函数中删除它并运行它,我的条形图看起来不错,只是所有条形都具有相同的颜色。所以我的问题是:在条形图上使用颜色图的正确方法是什么?
最佳答案
color
参数需要一个字符串或一个 RGB[A] 值(它可以是一种颜色,也可以是一个颜色序列,其中每个数据点都有一个颜色)。颜色图通常可以使用 [0, 1] 范围内的浮点数调用。
因此,您要做的是为每个条形取您想要的颜色值,将它们缩放到范围 [0, 1],然后使用这些重新缩放的值调用 my_cmap
。
因此,举例来说,您希望颜色对应于 y 值(条形的高度),那么您应该像这样修改您的代码(假设您之前已经调用了 import numpy as np
):
def my_barchart(my_df, my_cmap):
rescale = lambda y: (y - np.min(y)) / (np.max(y) - np.min(y))
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(my_df['days'], my_df['y'], color=my_cmap(rescale(my_df['y'])))
return fig
这是使用 color
参数和 cmap
输出的自包含最小示例:import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
my_cmap = plt.get_cmap("viridis")
rescale = lambda y: (y - np.min(y)) / (np.max(y) - np.min(y))
plt.bar(x, y, color=my_cmap(rescale(y)))
plt.savefig("temp")
输出:关于python - matplotlib 中的条形图使用颜色图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64068659/