我有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之間)對應於像素中包含的植被的能力,紅色像素對應於燃燒的樹木,灰色對應於已經燃燒並在灰燼中的樹木。所以紅色和灰色的顏色就是傳說中的動畫。 –