python - matplotlib 中的条形图使用颜色图

标签 python matplotlib

我有一个包含两列的 df:

  • y:y 轴的不同数值
  • 天:四个不同天的名称(星期一、星期二、星期三、星期四)

  • 我还有一个我自己制作的具有四种不同颜色的颜色图,它是一个 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")
    
    输出:
    enter image description here

    关于python - matplotlib 中的条形图使用颜色图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64068659/

    相关文章:

    python - 使用 Numpy 和 Matplotlib 绘制具有多个数据值的图表

    python - 通过变量更改 SQL 数据库值

    python - 搜索包含一些文本的行,替换完整行 python

    matplotlib - 在 Matplotlib 中,如何在不删除轴标签的情况下清除轴的内容?

    python - matplotlib stepfilled 直方图在 xubuntu 的值 10^-1 处中断

    pandas - 在 matplotlib 中绘制具有不同数量元素的列表

    python - 将 pandas 系列转换为 DataFrame

    python - 函数参数解包错误

    python - PyQt4:如何迭代 QListWidget 中的所有项目

    python - 使用 matplotlib 的三角形形式的多个子图