在 Imshow 中更改值的颜色

问题描述

我是使用 Python 图形的初学者,我对 matplotlib.pyplot.imshow 函数有疑问。 我的目标是通过在由列表组成的网格中使用随机游走的方法对海上石油泄漏的扩展进行建模。然后,我使用 imshow 来显示结果,所以我有一张由颜色组成的地图,以查看哪些地方粒子较多,哪些地方较少。这部分似乎有效。值从 0 到 5000。

但是,现在我想在我的地图中制作一个“海岸”,所以我决定在原始地图的最后一个列表中放置一个 n 值 -10 的列表,但我不知道如何使它与众不同在 imshow 显示的图形上,因为值 -10 与值 0 的颜色相同。图片显示imshow 显示内容底部的海岸不是很明显。

My python graph

例如,是否可以将“海岸”变成棕色?

此外,我想我使用了颜色图“viridis”,例如我不能为海岸选择 -1000 的值,因为它会使所有其他值都具有相同的颜色,因为在 -1000 到例如,5000、0 和 100 将接近,因此将显示为相同的颜色。

如果我不是很清楚,请告诉我。 非常感谢您的时间和帮助。 梅琳达

我的代码是:

def propacote(c0,D,taille,n):
    """c0 est la concentration initiale,D le taux de particules qui changent de case,taille le nombre de cases par ligne du quadrillage,n le nombre de parcours de tout le tableau"""

    import random as rd

    carte=[[0 for k in range(taille)] for k in range(taille)]

    carte[0][0]=c0

    particule=[carte[0][0]]

    carte[-1]=[100 for cote in range(taille)] #coast creation

    for passage in range(n):

        for ligne in range(len(carte)):
            for case in range(len(carte[0])):

                    for k in range(int(D*carte[ligne][case])):

然后我使用随机游走方法作为一般情况:

deplacement= rd.randint(1,4)

                            if deplacement==1: #moving down
                                carte[ligne][case]=carte[ligne][case]-1
                                carte[ligne+1][case]=carte[ligne+1][case]+1

                            elif deplacement==2: #move to the left
                                carte[ligne][case]=carte[ligne][case]-1
                                carte[ligne][case+1]=carte[ligne][case+1]+1

                            elif deplacement==3: #moving up
                                carte[ligne][case]=carte[ligne][case]-1
                                carte[ligne-1][case]=carte[ligne-1][case]+1

                            else:  #move to the left
                                carte[ligne][case]=carte[ligne][case]-1
                                carte[ligne][case-1]=carte[ligne][case-1]+1

最后,我使用 imshow 来显示图表:

#graph
    import numpy as np
    import matplotlib.pyplot as plt
    plt.figure()


    if passage==n-1:
        for cote in range(len(carte[-1])):

                                    if carte[-1][cote]!=100: #coast is impacted

                                        carte[-1][cote]=-20
    quadrillage = np.array(carte)
    print(quadrillage)


    plt.imshow(quadrillage,interpolation='none')
    plt.colorbar()
    plt.show()

return carte

解决方法

以下链接中的 sections TwoSlopeNorm 和 Custom 规范化似乎正是您要找的