Python 在Imshow中更改值的颜色

Python 在Imshow中更改值的颜色,python,matplotlib,imshow,Python,Matplotlib,Imshow,我是Python图形的初学者,我对matplotlib.pyplot.imshow函数有一个问题。 我的目标是通过在由列表组成的网格中使用随机游走的方法来模拟海上石油泄漏的扩展。然后,我使用imshow来显示结果,这样我就有了一个由颜色组成的贴图,以查看哪里有更多的粒子,哪里有更少的粒子。这部分似乎有效。值从0到5000 然而,现在我想在我的地图上画一个“海岸”,所以我决定在原始地图的最后一个列表中列出一个n值-10的列表,但我不知道如何在imshow显示的图形上有所不同,因为值-10与值0的颜

我是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])):
然后我使用随机游走法作为一般情况的示例:

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

下面链接中的TwoSlopeNorm和自定义规范化似乎正是您想要的

您有任何代码吗?您可以附加它吗?您可以通过将所需的部分复制到问题中来附加代码,然后选择所有代码并使用编辑器顶部的
{}
图标或Ctrl+K您当前的问题包含多个问题。这通常不会得到高质量的答案。我建议专注于一个问题,当这个问题解决后,您可以用修改后的代码询问您遇到的下一个问题。我建议您也可以使用
imshow(…,vmin=0,cmap=my_-cmap)
my_-cmap
下设置
。非常感谢你的帮助,我去看看!谢谢你可以在这里添加该链接的重要部分,并添加链接作为参考,或者只添加此链接作为评论。