Matploblib imshow自定义色彩映射(例如自定义地图和自定义缩放)

时间:2018-02-28 18:48:58

标签: python matplotlib colors

我试图通过自定义“增强”(例如自定义色彩映射)来绘制数据。我正在使用预定的着色方案,具有预先确定的比例,因此我没有想出这种疯狂的颜色/比例组合。

简而言之,我有一个十六进制列表,列出了制作自定义色彩图所需的颜色,以及相关的比例:

newData=[]
    for i in range(0,len(data["Target"].index.values)):
        for j in range(0,len(data["Source"].index.values)):  
            if data.iloc[i,1] == data.iloc[j,0] and not re.match("R.", 
            data.iloc[i,1], flags=0):
                newData.append(data.iloc[i,0] +"\t" + data.iloc[j,1])

如您所见,我的比例并不接近线性。它似乎是临时组成的。

无论如何,我对matplotlib来说还是有点新鲜,而且我很难看到穿过树林的森林如何获得:   1)自定义色图,给定它不是线性或指数的   2)将自定义色彩映射映射到这个愚蠢的不规则比例   3)在imshow中绘制它

为了记录,我正在使用底图在图像下绘制海岸线/国家等(对于那些关心的人来说,这是一张气象卫星图像)。

我开始使用colors.ListedColorMap,但这给了我一个均匀间隔的色彩映射。毋庸置疑,下面的代码块(为简洁而缩短)会生成均匀缩放的色彩映射,在图像上重复多次,使图像无法读取:

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

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

关于如何组合自定义色彩图和比例尺的任何想法,并让它在imshow中绘制?如果我的挫折感正在掩盖我此刻的一个简单回答,那道歉。

谢谢!

1 个答案:

答案 0 :(得分:0)

所以你需要指定颜色的间隔。这可以使用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()

enter image description here