我试图通过自定义“增强”(例如自定义色彩映射)来绘制数据。我正在使用预定的着色方案,具有预先确定的比例,因此我没有想出这种疯狂的颜色/比例组合。
简而言之,我有一个十六进制列表,列出了制作自定义色彩图所需的颜色,以及相关的比例:
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中绘制?如果我的挫折感正在掩盖我此刻的一个简单回答,那道歉。
谢谢!
答案 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()