numpy数组到彩色表或图像?

时间:2018-05-04 21:54:43

标签: python numpy matplotlib

我有以下numpy数组:

 ([[    0,     0,     0,     0,     0,     0,    27,   541,  1296, 10000],
   [    0,     0,     0,     0,     1,    44,   355,  1998,  3272, 10000],
   [    0,     0,     0,     2,    18,   209,  1069,  3239,  4670, 10000],
   [    0,     0,     0,    10,    96,   486,  1522,  3954,  5379, 10000],
   [    0,     0,     2,    28,   216,   748,  2127,  4769,  6011, 10000],
   [    0,     0,    18,    82,   379,  1200,  2867,  5395,  6528, 10000],
   [    0,     3,    39,   147,   599,  1489,  3237,  5740,  6909, 10000],
   [    0,     6,    48,   246,   759,  1777,  3610,  6034,  7144, 10000],
   [    0,    12,    90,   324,  1009,  2072,  3980,  6365,  7466, 10000],
   [    1,    12,   119,   438,  1103,  2337,  4215,  6594,  7568, 10000]])

我想要的是创建灰色的表/图像,其中较大的数字是较暗的颜色。 另外,我想将x& y轴设置为定义的值。

x-axis : [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]
y-axis : [500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4200, 4500]

到目前为止,我一直在玩imshow,效果不理想。

 fig, ax1 = plt.subplots(1,1)
 ax1.imshow(np.flipud(x), cmap='Greys', interpolation='nearest', extent=[100,1001,500,4501])
 ax1.set_xticklabels(xaxis)
 ax1.set_yticklabels(yaxis)
 ax1.grid()
 fig.show()

首先图像应该是正方形,第二次插值会模糊范围的精确度(网格位于单元格的中间而不是边缘)。

enter image description here

1 个答案:

答案 0 :(得分:3)

这会是一个令人满意的结果吗?

import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="white")
cmap = sns.color_palette("Greys", 8)
f, ax = plt.subplots(figsize=(10, 10))
ax = sns.heatmap(x, cmap=cmap, vmax=10000, vmin=0,
                 square=True, linewidths=.5, cbar_kws={"shrink": .5},
                 xticklabels=[100, 200, 300, 400, 500, 600, 700, 800, 900, 1000], 
                 yticklabels=[4500, 4200, 4000, 3500, 3000, 2500, 2000, 1500, 1000, 500])

enter image description here