我正在尝试基于4个离散值1,2,3,4创建pcolor。我想将1定义为黑色,将2定义为红色,将3定义为黄色,将4定义为绿色。有谁知道怎么做?
test = ([1,2,2,1,3],[1,1,1,1,4],[2,1,1,2,1])
import numpy as np
dataset = np.array(test)
plt.pcolor(dataset)
谢谢,
答案 0 :(得分:5)
我认为你不想使用pcolor。 From the Matlab docs(可能是matplotlib pcolor做同样的事情):
C的最小和最大元素分配了色彩映射中的第一个和最后一个颜色。 C中其余元素的颜色由从值到色图元素的线性映射确定。
您可以尝试imshow
,然后使用dict
来映射您想要的颜色:
colordict = {1:(0,0,0),2:(1,0,0),3:(1,1,0),4:(0,1,0)}
test = ([1,2,2,1,3],[1,1,1,1,4],[2,1,1,2,1])
test_rgb = [[colordict[i] for i in row] for row in test]
plt.imshow(test_rgb, interpolation = 'none')
答案 1 :(得分:2)
根据this doc,您可以创建这样的颜色
red = (1, 0, 0) # This would be red
green = (0, 1, 0) # this is green
所以 colors =((0,0,0),(1,0,0),(0,1,0))
会给你colors[1]
红色,colors[2]
绿色。
该程序显示了pcolor的工作原理:
import pylab as plt
import numpy as np
def test_pcolor():
cmap = plt.get_cmap('gnuplot')
Z = np.empty((100, 100))
for x in range(100):
for y in range(100):
Z[y, x] = 0.0001 * x * y
plt.subplot(1,1,1)
c = plt.pcolor(Z, cmap = cmap)
plt.show()
def main():
test_pcolor()
return 0
if __name__ == '__main__':
main()
左下角为0.0,右上角为1.0。 pcolor从渐变中获取实际颜色。我在这里使用了gnuplot渐变。所以0.0是渐变的左边颜色,1.0是右边的颜色。
如果您想要特定颜色,可以定义自己的渐变。 This是一个很好的彩色地图教程。