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,这样这个列表现在表示区间边界。因此,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

以上是关于Matplotlib imshow与自定义色彩映射(例如自定义地图和自定义缩放)的主要内容,如果未能解决你的问题,请参考以下文章

python使用matplotlib可视化使用matplotlib可视化scipy.misc图像自定义使用winter色彩映射将不同亮度映射到不同的色彩

Python matplotlib imshow

Matplotlib风格与样式

如何在matplotlib散点图中规范化色彩映射?

Python Matplotlib绘图笔记草稿 未完成 仅为个人笔记

matplotlib 笔记 imshow