【问题标题】:How to assign RGB color values to grid mesh with matplotlib如何使用 matplotlib 将 RGB 颜色值分配给网格网格
【发布时间】:2011-11-17 01:33:53
【问题描述】:

请考虑这个简化的 sn-p:

import numpy as np

x = np.arange(3)
y = np.arange(2)

X, Y = np.meshgrid(x,y)

我想为每个网格单元分配已经准备好的颜色值。 对于每个 RGB 通道,我都有与 XY 网格相同形状的颜色值作为归一化的 RGB 值 - 所以它是 3 个 numpy 数组,每个数组由 0 到 1 个浮点数组成,代表通道值

我第一次尝试使用matplotlib.pyplot.pcolor,因为它似乎是我想要的确切工具,但我不明白颜色映射是如何完成的。

颜色数组(文档中的 C)似乎映射到默认(或手动分配)颜色图,但我无法获取此颜色数组中值的逻辑及其作用。
如果值从网格单元值映射到默认(或分配)颜色图,那么 C 颜色数组的目的是什么?
我为上面的示例(2x1 numpy 数组)手动制作了这个 C 数组,但无论它的值如何,我都会得到相同的颜色,这些颜色似乎只依赖于网格单元格的值,而不是这个 C 数组中的值。

所以我在这里感到困惑并寻求帮助,这不一定需要解释这个 pcolor 函数,但也许用 matplotlib 为网格网格分配颜色值的正确方法是什么

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    你想要imshow 而不是pcolor。 (虽然你可以使用pcolorpcolormesh 来做这个。)

    import numpy as np
    import matplotlib.pyplot as plt
    
    # Make some random data to represent your r, g, b bands.
    ny, nx = 2, 3
    r, g, b = [np.random.random(ny*nx).reshape((ny, nx)) for _ in range(3)]
    
    c = np.dstack([r,g,b])
    
    plt.imshow(c, interpolation='nearest')
    plt.show()
    

    【讨论】:

    • 相当不错!那是MODIS数据吗?此外,对于连续数据,您可能不需要我在示例中指定的“最近”插值。默认插值方法是双线性的,它会更适合您的数据。
    • 再次感谢插值技巧,图像使用 matplotlib 进行缩放,并且以 1:1 的比例缩放当然很漂亮。你是对的 - 在我看来,你只是通过部分图像来计算它,这让我很惊讶 :) 干杯
    • 这似乎不适用于pcolor,并将错误返回为ValueError: too many values to unpack。也许,pcolor 仅将 1D 或 2D 数组作为颜色参数。有没有办法让它适用于pcolor
    猜你喜欢
    • 2014-07-16
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2022-06-13
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多