赞
踩
热力图是一种通过对色块着色来显示数据的统计图表。绘图时,需指定颜色映射的规则。例如,较大的值由较深的颜色表示,较小的值由较浅的颜色表示;较大的值由偏暖的颜色表示,较小的值由较冷的颜色表示,等等。
从数据结构来划分,热力图一般分为两种。第一,表格型热力图,也称色块图。它需要 2 个分类字段和 1 个数值字段,分类字段确定 x、y 轴,将图表划分为规整的矩形块。数值字段决定了矩形块的颜色。第二,非表格型热力图,或者叫做平滑的热力图,它需要 3 个数值字段,可绘制在平行坐标系中(2个数值字段分别确定x、y轴,1个数值字段确定着色)。
热力图适合用于查看总体的情况、发现异常值、显示多个变量之间的差异,以及检测它们之间是否存在任何相关性。
下面我们就通过例子来讲述热力图的绘制,示例代码如下:
import matplotlib.pyplot as plt
import numpy as np
harvest = np.array([[0.56, 0.23, 6.9, 3.9, 0.0, 4.0, 0.0],
[2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],
[1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],
[0.6, 0.0, 0.3, 10, 3.1, 0.0, 0.0],
[0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],
[1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],
[0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])
plt.imshow(harvest)
plt.tight_layout()
plt.show()
将一个二维数组传入到 imshow 方法中便可以绘制一个热力图,每个色块的颜色代表数据的大小。
结果展示如下:
上面只是绘制了色块,并没有指明 x 轴 和 y 轴代表的含义,下面我们加上 x 轴和 y 轴的标签,并加上标题。示例代码如下:
import matplotlib.pyplot as plt import numpy as np X=['x1','x2','x3','x4','x5','x6','x7'] Y=['y1','y2','y3','y4','y5','y6','y7'] harvest = np.array([[0.56, 0.23, 6.9, 3.9, 0.0, 4.0, 0.0], [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0], [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0], [0.6, 0.0, 0.3, 10, 3.1, 0.0, 0.0], [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0], [1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1], [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]]) plt.xticks(np.arange(len(X)),labels=X,rotation=45, rotation_mode="anchor", ha="right") plt.yticks(np.arange(len(Y)),labels=Y,rotation=45, rotation_mode="anchor", ha="right") plt.imshow(harvest) plt.tight_layout() plt.show()
结果展示为:
上图中,我们加上了 x 轴和 y 轴代表的含义以及整个图的标题,但是现在我们还不知道不同色块所对应的数值的大小,下面我们就来加上。示例代码如下:
只需要加上一句plt.colorbar()
import matplotlib.pyplot as plt import numpy as np X=['x1','x2','x3','x4','x5','x6','x7'] Y=['y1','y2','y3','y4','y5','y6','y7'] harvest = np.array([[0.56, 0.23, 6.9, 3.9, 0.0, 4.0, 0.0], [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0], [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0], [0.6, 0.0, 0.3, 10, 3.1, 0.0, 0.0], [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0], [1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1], [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]]) plt.xticks(np.arange(len(X)),labels=X,rotation=45, rotation_mode="anchor", ha="right") plt.yticks(np.arange(len(Y)),labels=Y,rotation=45, rotation_mode="anchor", ha="right") plt.imshow(harvest) plt.tight_layout() plt.colorbar() plt.show()
展示如下:
上图我们便加上了颜色和数值的对应规则。接下来我们再为每个色块加上所代表的数值。例如:
(只需要加入一个循环)
import matplotlib.pyplot as plt import numpy as np X=['x1','x2','x3','x4','x5','x6','x7'] Y=['y1','y2','y3','y4','y5','y6','y7'] harvest = np.array([[0.56, 0.23, 6.9, 3.9, 0.0, 4.0, 0.0], [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0], [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0], [0.6, 0.0, 0.3, 10, 3.1, 0.0, 0.0], [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0], [1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1], [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]]) plt.xticks(np.arange(len(X)),labels=X,rotation=45, rotation_mode="anchor", ha="right") plt.yticks(np.arange(len(Y)),labels=Y,rotation=45, rotation_mode="anchor", ha="right") for i in range(len(X)): for j in range(len(Y)): text = plt.text(j, i, harvest[i, j], ha="center", va="center", color="w") plt.imshow(harvest) plt.tight_layout() plt.colorbar() plt.show()
展示为:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。