[英]How to determine the colours when using matplotlib.pyplot.imshow()?
I'm using imshow() to draw a 2D numpy array, so for example: 我正在使用imshow()来绘制2D numpy数组,例如:
my_array = [[ 2. 0. 5. 2. 5.]
[ 3. 2. 0. 1. 4.]
[ 5. 0. 5. 4. 4.]
[ 0. 5. 2. 3. 4.]
[ 0. 0. 3. 5. 2.]]
plt.imshow(my_array, interpolation='none', vmin=0, vmax=5)
which plots this image: 绘制此图像:
What I want to do however, is change the colours, so that for example 0 is RED, 1 is GREEN, 2 is ORANGE, you get what I mean. 然而,我想要做的是改变颜色,例如0是RED,1是GREEN,2是ORANGE,你明白我的意思。 Is there a way to do this, and if so, how?
有没有办法做到这一点,如果是这样,怎么样?
I've tried doing this by changing the entries in the colourmap, like so: 我试过通过更改colourmap中的条目来尝试这样做,如下所示:
cmap = plt.cm.jet
cmaplist = [cmap(i) for i in range(cmap.N)]
cmaplist[0] = (1,1,1,1.0)
cmaplist[1] = (.1,.1,.1,1.0)
cmaplist[2] = (.2,.2,.2,1.0)
cmaplist[3] = (.3,.3,.3,1.0)
cmaplist[4] = (.4,.4,.4,1.0)
cmap = cmap.from_list('Custom cmap', cmaplist, cmap.N)
but it did not work as I expected, because 0 = the first entry in the colour map, but 1 for example != the second entry in the colour map, and so only 0 is drawn diffrently: 但它没有像我预期的那样工作,因为0 =颜色映射中的第一个条目,但是例如1个!=颜色映射中的第二个条目,因此只有0被不同地绘制:
I think the easiest way is to use a ListedColormap
, and optionally with a BoundaryNorm
to define the bins
. 我认为最简单的方法是使用
ListedColormap
,并可选择使用BoundaryNorm
来定义bins
。 Given your array above: 鉴于上面的数组:
import matplotlib.pyplot as plt
import matplotlib as mpl
colors = ['red', 'green', 'orange', 'blue', 'yellow', 'purple']
bounds = [0,1,2,3,4,5,6]
cmap = mpl.colors.ListedColormap(colors)
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
plt.imshow(my_array, interpolation='none', cmap=cmap, norm=norm)
Because your data values map 1-on-1 with the boundaries of the colors, the normalizer
is redundant. 由于数据值与颜色边界一对一地映射,因此
normalizer
是多余的。 But i have included it to show how it can be used. 但我已经把它包括在内以表明它是如何使用的。 For example when you want the values 0,1,2 to be red, 3,4,5 green etc, you would define the boundaries as [0,3,6...].
例如,当您希望值0,1,2为红色,3,4,5绿色等时,您可以将边界定义为[0,3,6 ...]。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.