【发布时间】:2015-09-24 16:06:35
【问题描述】:
我使用imshow()来绘制一个二维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)
绘制此图像:
然而,我想做的是改变颜色,例如 0 是红色,1 是绿色,2 是橙色,你明白我的意思。有没有办法做到这一点,如果有,怎么做?
我尝试通过更改颜色图中的条目来做到这一点,如下所示:
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)
但它没有像我预期的那样工作,因为 0 = 颜色映射中的第一个条目,但例如 1 != 颜色映射中的第二个条目,因此只有 0 被绘制不同:
【问题讨论】:
-
您需要制作自己的离散色图。见this question。
-
@areuexperienced 我已经尝试使用它来更改颜色图,但它没有按预期工作。例如,将第一个颜色条目更改为 (1, 1, 1, 1.0) 可以按预期工作;我的 numpy 数组中的 0 被绘制为白色块。但是,我认为更改第二个颜色条目将对应于我的 numpy 数组中的 1,但事实并非如此。所以改变它们实际上并不会影响它的颜色; 1-5 保持相同的颜色。
标签: python matplotlib colors draw