在Imshow中更改值的颜色

2024-09-27 00:21:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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

Tags: inlefor颜色rangedepltcase

热门问题