imshow详解热图知识

热图(heatmap)是数据分析的常用方法,通过色差、亮度来展示数据的差异、易于理解。Python在Matplotlib库中,调用imshow()函数实现热图绘制。
参考资料:http://matplotlib.org/users/image_tutorial.html

imshow函数说明

imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, hold=None, data=None, **kwargs)

其中,X变量存储图像,可以是浮点型数组、unit8数组以及PIL图像,如果其为数组,则需满足一下形状:
    (1) M*N      此时数组必须为浮点型,其中值为该坐标的灰度;
    (2) M*N*3  RGB(浮点型或者unit8类型)
    (3) M*N*4  RGBA(浮点型或者unit8类型)

代码如下:

import matplotlib.pyplot as plt
X = [[1, 2], [3, 4], [5, 6]]
plt.imshow(X)
plt.colorbar()
plt.show()

运行的结果如下图:

代码中 plt.imshow(X) 中传入的数组X=[[1,2],[3,4],[5,6]] 是对应的颜色

1:代表右侧颜色bar上 数字1 位置的深紫色

2:数字2位置的蓝色

3:颜色bar上数字3位置的深绿色

4:数字4位置浅绿色

5:数字5位置草绿色

6:黄色

plt.colorbar(cax=None,ax=None,shrink=0.5)可设置Bar为一半长度。

代码如下

import matplotlib.pyplot as plt
X = [[1, 2], [3, 4], [5, 6]]
plt.imshow(X)
plt.colorbar(cax=None, ax=None, shrink=0.5)
plt.show()

运行结果如图

 

Colormap:参数cmap用于设置热图的Colormap。(参考百度百科)
Colormap是MATLAB里面用来设定和获取当前色图的函数,可以设置如下色图:
    hot 从黑平滑过度到红、橙色和黄色的背景色,然后到白色。
    cool 包含青绿色和品红色的阴影色。从青绿色平滑变化到品红色。
    gray 返回线性灰度色图。
    bone 具有较高的蓝色成分的灰度色图。该色图用于对灰度图添加电子的视图。
    white 全白的单色色图。 
    spring 包含品红和黄的阴影颜色。 
    summer 包含绿和黄的阴影颜色。
    autumn 从红色平滑变化到橙色,然后到黄色。 
    winter 包含蓝和绿的阴影色。

下面这段代码是显示原图、灰度(gray)、和春夏秋冬的示例。

import matplotlib.pyplot as plt

X = [[1, 2], [3, 4]]
fig = plt.figure()
ax = fig.add_subplot(231)
ax.imshow(X)

ax = fig.add_subplot(232)
im = ax.imshow(X, cmap=plt.cm.gray) #灰度
plt.colorbar(im, cax=None, ax=None, shrink=0.5)

ax = fig.add_subplot(233)
im = ax.imshow(X, cmap=plt.cm.spring) #春
plt.colorbar(im, cax=None, ax=None, shrink=0.5)

ax = fig.add_subplot(234)
im = ax.imshow(X, cmap=plt.cm.summer) #夏
plt.colorbar(im, cax=None, ax=None, shrink=0.5)

ax = fig.add_subplot(235)
im = ax.imshow(X, cmap=plt.cm.autumn)
plt.colorbar(im, shrink=0.5, ticks=[-1, 0, 1])

ax = fig.add_subplot(236)
im = ax.imshow(X, cmap=plt.cm.winter)
plt.colorbar(im, shrink=0.5)

plt.show()

运行的结果如下图

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐