在 Imshow 中更改值的颜色

Mel*_*daP 5 python matplotlib imshow

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

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

我的蟒蛇图

例如,有可能使“海岸”变成棕色?

此外,我想我使用了颜色图 '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])):
Run Code Online (Sandbox Code Playgroud)

然后我使用随机游走方法,例如一般情况:

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
Run Code Online (Sandbox Code Playgroud)

最后,我使用 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
Run Code Online (Sandbox Code Playgroud)