我有3组值的数组:0和1(绿色梯度) Matplotlib:如何在2个或更多的颜色中切割一个颜色条?
- 值
- 值等于3(灰)
多亏了这个帖子(Define a colormap for each set of values in an array)我能得到这个代码:
from random import random
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
from matplotlib import cm
n=11
tab = np.array([[random() for i in range(n)] for j in range(n)])
tab[1,2] = 2.
tab[3,4] = 2.
tab[5,6] = 3.
tab[7,8] = 3.
values1 = np.ma.masked_array(tab, tab > 1.)
values2 = np.ma.masked_array(tab, tab != 2.)
values3 = np.ma.masked_array(tab, tab != 3.)
# 50 values for later use from 0 to 1
greens = cm.Greens(np.linspace(0,1, num=50))
# 25 values for later use from 1 to 1.5
greensfill = cm.Greens(np.ones(25))
# 50 values red for later use from 1.5 to 2.5
red = [(1,0,0,1)]*len(greens)
# 50 values gray for later use from 2.5 to 3.5
gray = [(.5,.5,.5,1)]*len(greens)
colors = np.vstack((greens, greensfill, red, gray))
# in total we now have 175 colors in the colormap
mycmap = mcolors.LinearSegmentedColormap.from_list('my_colormap', colors)
#we now map those 175 colors to the range between 0 and 3.5
im = plt.imshow(tab, cmap = mycmap, interpolation="none", vmin=0, vmax=3.5)
cb = plt.colorbar(im)
cb.set_ticks([0,1,2,3])
plt.show()
下面是结果:
我的问题是:可以matplotlib获得通过削减现有的颜色映射成3个独立的颜色表或者相近的东西像下面的图片(编辑用Photoshop做)?
编辑:
greens = cm.Greens(np.linspace(0,1, num=75))
red = [(1,0,0,1)]*(len(greens)/2)
white = [(1,1,1,1)]*3
black = [(0,0,0,1)]*1
gray = [(.5,.5,.5,1)]*(len(greens)/2)
colors = np.vstack((greens, black, white, black, red, black, white, black, gray))
mycmap = mcolors.LinearSegmentedColormap.from_list('my_colormap', colors)
我修改了代码,并获得内容,但它并不好看和索引是在错误的地方:
伟大的想法(因为我没有在互联网上看到任何类似的东西,所以我觉得它会有点困难)!我该如何移动我想要的索引? –
@LoïcPoncin您可以通过'set_ticks'指定勾号位置并通过'set_ticklabels'勾选标签。所以你可以通过'cb.set_ticks([0,1.5,2,3])来获得右手绘图的刻度+标签; cb.set_ticklabels(['0','1','2','3'])'。然而,它将标签'1'设置在位置1.5,因此实际上使颜色条无效。同样在你的右手绘图中(红色区域),红色区域从1到2.5,灰色区域从2.5到3.5,但是它们的大小相同。绿色跨越一个类似的区域,如灰色和小于红色的区域,但是它们是三者中最大的一个。 –
谢谢。 @a_guest是的,我知道它并不真正对应于彩条的原理。事实上,我在一个关于森林火灾的学校项目中工作,在我的动画中,绿色渐变(0和1之间)对应于像素中包含的植被的能力,红色像素对应于燃烧的树木,灰色对应于已经燃烧并在灰烬中的树木。所以红色和灰色的颜色就是传说中的动画。 –