2014-10-31 16 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