2017-08-18 21 views
0

我已在data陣列內的以下data['coeff']柱:Pylab colormap的發生器返回恆定查找表

[2.57270343, 3.65648059, 2.23084319, 4.80688107, 6.701842, 9.74599594, 7.05068671, 4.01677958, 3.37391547, 3.1511914, 2.38645804, 2.8914971, 3.49830092, 1.44652964, 6.689542, 7.57978187, 10.44210292, 9.96295341, 4.64736146, 3.1432992, 3.57139011, 3.46039262, 3.1436559, 2.56808725, 6.4063686, 7.31260831, 7.26623531, 10.46764653, 6.73590746, 2.7361601, 4.84963666, 5.61582771, 2.86951066, 3.46070112, 5.6345987, 15.91982055, 16.49156807, 11.90533765, 5.11663041, 2.0236397, 9.56519465, 7.69136698, 6.05681034, 4.23944285, 11.4375905, 23.21954318, 25.07053804, 14.68918469, 3.85383511, 2.2003411, 5.09153196, 6.61014214, 10.88575876, 5.09483765, 18.3454972, 27.26258116, 25.72212513, 8.84484278, 1.57545174, 1.8912232, 16.78862314, 20.29314535, 12.44983752, 3.6037403, 3.0240955, 2.30155483, 1.89219047, 5.04316851, 5.45651532, 5.4099686, 6.20357723, 3.29846311, 1.83343417, 5.46524273, 5.9786796, 4.16043566, 5.28458388, 3.69230367, 1.12351996, 3.5924855, 2.18969866, 6.26344489, 6.56806219, 4.03959973] 

當我這些數據傳遞給pylab.cm.RdBu(data['coeff'])函數它給我回來常數表(每個點具有相同的顏色):

array([[ 0.01960784, 0.18823529, 0.38039216, 1.  ], 
     [ 0.01960784, 0.18823529, 0.38039216, 1.  ], 
     [ 0.01960784, 0.18823529, 0.38039216, 1.  ], 
     ... 
     [ 0.01960784, 0.18823529, 0.38039216, 1.  ]]) 

似乎出現了一些問題,因爲當我使用scattercmap一切正常(即點顏色和適當的比例):

plt.scatter(data['x'], data['y'], c=data['coeff'], cmap='RdBu', marker='o') 

回答

1

Matplotlib顏色表是0和1的任何值之間0 <= x <= 1標準化會給從顏色表的顏色。如果將顏色映射應用於值x < 0,它將返回對應於0的值,並且如果將顏色映射應用於值x > 1,它將返回對應於1的值。
後一種情況發生在這裏。由於列表中的所有值都大於1,你會essentiall得到相同的結果採取的顏色表作爲輸入,將使用一個標準化的內部的價值觀[0,1]第一映射到範圍

plt.cm.RdBu(np.ones(len(data))) 

大多數繪圖命令,然後應用色彩地圖。標準化也可以在這些命令的外部給出,例如,

​​

norm = plt.Normalize(vmin=1.2, vmax=11.5) 
plt.scatter(..., c=data, cmap='RdBu', norm=norm) 

應用一個顏色表數據直接將因此也需要您使用正常化。

norm = plt.Normalize(vmin=data.min(), vmax=data.max()) 
plt.cm.RdBu(norm(data))