2014-10-31 24 views
0

我有一組數據在2d數組(72 * 144)。該2d數組中的元素集合從1到12和-999。這裏是2D陣列的快照Python將二維數據聚類到圖像?

array([[ 7, 7, 7, ..., 7, 7, 7], 
     [ 7, 7, 7, ..., 7, 7, 7], 
     [-999, -999, -999, ..., -999, -999, -999], 
     ..., 
     [-999, -999, -999, ..., -999, -999, -999], 
     [-999, -999, -999, ..., -999, -999, -999], 
     [-999, -999, -999, ..., -999, -999, -999]], dtype=int32) 

我想從該2D陣列,這是我已經能夠用下面的代碼來創建創建一個圖像:

import numpy as np 
from matplotlib import pylab as plt 

A = np.fromfile('1984_Jan/yyyymmddhh.84010209', dtype='int32') 
B = np.reshape(A, (72, 144)) 

plt.imshow(B, cmap=plt.cm.get_cmap("Reds"), interpolation="nearest") 
plt.colorbar() 
plt.show() 

由此生成的圖像只有2種顏色,白色和紅色(CMAP arg)。我希望它能生成12種不同的顏色,一種用於數據集中的每個元素。所以,如果一個像素是1,那麼它的某種顏色,然後是2時,那麼它的另一種顏色,等等。

有人能告訴我如何實現這一目標嗎?

回答

0

你可以簡單地離開get_cmap空白的參數,以便有不同的顏色不同的數字:

plt.imshow(B, cmap=plt.cm.get_cmap(), interpolation="nearest")

但這做法至少在我看來不會創建一個體面的形象。因此,我建議你使用一些指定的顏色吧地圖,但使用gist_rainbow地圖無法使用這些連續的色彩映射表,例如將使它更好:

plt.imshow(a, cmap=plt.cm.get_cmap("gist_rainbow"), interpolation="nearest")

最後,檢查出here你會發現所有的顏色貼圖matplotlib供應。

+0

感謝您的回答,但我仍然只看到兩種顏色,我想爲每個像素分配一種顏色。 – Pete 2014-10-31 13:05:15

+0

@Pete你看到只有兩種顏色的原因應該是因爲你有-999,這樣的極端數量,在你的矩陣中,這將使彩色地圖混沌。解決這個問題的最簡單方法可能是通過'a [np.where(a == - 999)] = 0'將所有-999分配給0。然後我會確定你看到了多種顏色。 – Jake0x32 2014-10-31 23:41:59

+0

@Pete另外,如果你傾向於建立你自己的調色板,看看[這裏](http://stackoverflow.com/questions/15207052/matplotlib-color-map-predefine-mappings-to-values)和[這裏]( http://stanford.edu/~mwaskom/software/seaborn-dev/tutorial/color_palettes.html) – Jake0x32 2014-10-31 23:49:42