Python聚类2d数据到图像?

时间:2014-10-31 05:27:18

标签: python arrays

我在2d数组(72 * 144)中有一组数据。该2d数组中的元素集是1 - 12和-999。这是2d数组的快照

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,那么它的另一种颜色,依此类推。

有人可以告诉我如何实现这个目标吗?

1 个答案:

答案 0 :(得分: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提供的所有颜色贴图。