自定义地图和自定义地图

2024-05-14 10:29:24 发布

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

为了让imshow用自定义的“增强”(例如自定义颜色图)来绘制数据,我绞尽脑汁。我使用的是预先确定的配色方案,有预先确定的比例,所以我没有想出这种疯狂的颜色/比例组合。在

简而言之,我有一个十六进制的颜色列表,我需要制作自定义颜色映射,以及相关的比例:

colors = ['#000000', '#060606', '#4b4b4b', '#707070', '#404040', '#707070', '#a0a0a0', '#000000', '#ffffff', '#888888', '#585858']

scale = [0, 59, 68, 97, 175, 188, 199, 209, 215, 221, 226]

如你所见,我的比例尺不是线性的。看来是临时编造的。在

不管怎么说,我对matplotlib还是有点陌生,我很难通过树看到森林,如何获得: 1) 自定义颜色映射,给定其非线性或指数 2) 将自定义颜色映射到这个愚蠢的不规则比例 3) 在imshow里画出来

为了记录在案,我使用底图在图像下绘制海岸线/国家等(这是一个气象卫星图像,供关心的人使用)。在

我开始用colors.ListedColorMap,但这给了我一个等间距的彩色地图。不用说,下面的代码块(为简洁起见缩短)生成了一个均匀缩放的colormap,它在图像上重复几次,使图像无法读取:

^{pr2}$

有什么想法如何结合定制的色彩图和比例,并让它在imshow中绘图?如果我的沮丧让我暂时无法回答一个简单的问题,我很抱歉。在

谢谢!在


Tags: 数据图像列表颜色绘制方案线性比例
1条回答
网友
1楼 · 发布于 2024-05-14 10:29:24

所以你需要指定颜色的间隔。使用BoundaryNorm可以很容易地做到这一点,但是需要知道colormap的最大值。在

所以假设最大值是250,我们可以将它添加到scale中,这样这个列表现在表示区间边界。因此,scalecolors多了一个元素。在

import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np

colors = ['#000000', '#060606', '#4b4b4b', '#707070', '#404040', '#707070', 
          '#a0a0a0', '#000000', '#ffffff', '#888888', '#585858']

scale = [0, 59, 68, 97, 175, 188, 199, 209, 215, 221, 226, 250]

cmap=matplotlib.colors.ListedColormap(colors)
norm=matplotlib.colors.BoundaryNorm(scale, len(colors))

data = np.atleast_2d(np.arange(250))
plt.imshow(data, aspect="auto", cmap=cmap, norm=norm)

plt.show()

enter image description here

相关问题 更多 >

    热门问题