设置两个 matplotlib imshow 图具有相同的颜色地图比例

Posted

技术标签:

【中文标题】设置两个 matplotlib imshow 图具有相同的颜色地图比例【英文标题】:Set two matplotlib imshow plots to have the same color map scale 【发布时间】:2015-12-22 08:10:34 【问题描述】:

我正在尝试绘制具有相同比例的字段。上面的图像值比下面的值高 10 倍,但它们在 imshow 中变成了相同的颜色。如何将两者设置为具有相同的颜色比例?

我在图片下方添加了我正在使用的代码..

def show_field(field1,field2):
    fig = plt.figure()
    ax = fig.add_subplot(2, 1, 1)
    ax.imshow(field1,cmap=plt.cm.YlGn)
    ax.set_adjustable('box-forced')
    ax.autoscale(False)
    ax2 = fig.add_subplot(2, 1, 2)
    ax2.set_adjustable('box-forced')
    ax2.imshow(field2,cmap=plt.cm.YlGn)
    ax2.autoscale(False)
    plt.show()

【问题讨论】:

您正在寻找 vminvmax 参数。 (旁注,这是一个重复的问题,虽然我目前找不到规范版本...) 是的,我也没有找到这个问题,虽然我确信它被提出了很多次...... 我很确定有一个比我标记为重复的问题更精确的重复...如果您或其他任何人遇到它,请随时更改它! Blerg,好吧,我不能用正确的重复问题重新关闭它,但这里有一个更准确的重复问题:***.com/questions/3373256/… @JoeKington 那你怎么说,我应该删除我的问题吗? 【参考方案1】:

首先,您需要定义要使用的颜色范围的最小值和最大值。在此示例中,它是您正在绘制的两个数组的最小值和最大值。然后使用这些值来设置 imshow 颜色代码的范围。

import numpy as np     
def show_field(field1,field2):

    combined_data = np.array([field1,field2])
    #Get the min and max of all your data
    _min, _max = np.amin(combined_data), np.amax(combined_data)

    fig = plt.figure()
    ax = fig.add_subplot(2, 1, 1)
    #Add the vmin and vmax arguments to set the color scale
    ax.imshow(field1,cmap=plt.cm.YlGn, vmin = _min, vmax = _max)
    ax.set_adjustable('box-forced')
    ax.autoscale(False)
    ax2 = fig.add_subplot(2, 1, 2)
    ax2.set_adjustable('box-forced')
    #Add the vmin and vmax arguments to set the color scale
    ax2.imshow(field2,cmap=plt.cm.YlGn, vmin = _min, vmax = _max)
    ax2.autoscale(False)
    plt.show()

【讨论】:

我不想连接两个非常大的矩阵来得到combined_data,所以我只是做了_min = min(field1.min(), field2.min())【参考方案2】:

为了补充已接受的答案,这里有一个函数可以制作任意数量的 imshow 图,它​​们都共享相同的颜色图:

def show_fields(fields):
    combined_data = np.array(fields)
    #Get the min and max of all your data
    _min, _max = np.amin(combined_data), np.amax(combined_data)

    fig = plt.figure()
    for i in range(len(fields)):
        ax = fig.add_subplot(len(fields), 1, i+1)
        #Add the vmin and vmax arguments to set the color scale
        ax.imshow(fields[i],cmap=plt.cm.YlGn, vmin = _min, vmax = _max)
        ax.set_adjustable('box-forced')
        ax.autoscale(False)

    plt.show()

用法:

show_fields([field1,field2,field3])

【讨论】:

以上是关于设置两个 matplotlib imshow 图具有相同的颜色地图比例的主要内容,如果未能解决你的问题,请参考以下文章

同一个 imshow matplotlib 中的两个不同颜色的颜色图

Python matplotlib imshow

matplotlib 笔记 imshow

OpenCV 函数学习04-用 matplotlib 显示图像(plt.imshow)

Matplotlib:使用 imshow 显示数组值

matplotlib.imshow() 实际返回啥对象?如何使用这个对象?