Matplotlib imshow与自定义色彩映射(例如自定义地图和自定义缩放)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matplotlib 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,但这给了我一个均匀间隔的色彩映射。毋庸置疑,下面的代码块(为简洁而缩短)会产生均匀缩放的色彩映射,在图像上重复多次,使图像不可读:
enhancement_colormap = matplotlib.colors.ListedColormap(colors)
m = Basemap(projection='geos', lon_0=sat_lon, resolution='i', area_thresh=1000, llcrnrx=X1.min(),llcrnry=Y1.min(), urcrnrx=X1.max(),urcrnry=Y1.max())
m.imshow(np.flipud(data1),cmap=enhancement_colormap)
关于如何组合自定义色彩图和比例尺的任何想法,并让它在imshow中绘制?如果我的挫折感正在掩盖我此刻的一个简单回答,那道歉。
谢谢!
所以你需要指定颜色的间隔。这可以使用BoundaryNorm
轻松完成,但需要知道colormap的最大值。
所以说最大值是250,我们可以将它添加到scale
,这样这个列表现在表示区间边界。因此,scale
比colors
有一个元素。
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()
以上是关于Matplotlib imshow与自定义色彩映射(例如自定义地图和自定义缩放)的主要内容,如果未能解决你的问题,请参考以下文章
python使用matplotlib可视化使用matplotlib可视化scipy.misc图像自定义使用winter色彩映射将不同亮度映射到不同的色彩