热力图是一种数据的图形化表示,具体而言,就是将二维数组中的元素用颜色表示。热力图之所以非常有用,是因为它能够从整体视角上展示数据,更确切的说是数值型数据。
使用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, **kwargs)
主要用到的参数含义如下:
X
可以使类似数组的对象,或者是PIL类型图像,其中,数组对象可选shape为:
(M, N)
colormap
展示(M, N, 3)
float
或者\(0-255\)之间的int
(M, N, 4)
float
或者\(0-255\)之间的int
※
M
代表rows
,N
代表colums
※ 超过元素限定范围的元素值将被clipped
cmap
str
或 matplotlib.colors.Colormap
类型,用于将标量数据映射到颜色的Colormap
实例或已注册的Colormap
名称。
※ 只对二维数组有效,RGB(A)将自动忽略
norm
在使用cmap
之前,用来将二维数组数据归一化到\([0, 1]\),默认是线性的,最小值对应\(0\),最大值对应\(1\)。
这要注意,不然每次画图最大最小值不一样,色彩不好比较。
interpolation
插值方法,默认'nearest'
,可以支持的方法有:
'none'
'nearest'
'bilinear'
'bicubic'
'spline16'
'spline36'
'hanning'
'hamming'
'hermite'
'kaiser'
'quadric'
'catrom'
'gaussian'
'bessel'
'mitchell'
'sinc'
'lanczos'
alpha
透明度,\(0\)表示透明,\(1\)表示不透明
vmin
, vmax
当输入的时二维数组标量数据并且没有明确的norm
时,vmin
和vmax
定义colormap
覆盖的数据范围,默认情况下,colormap
覆盖所提供的值的完整范围数据
当
norm
给定时,这两个参数无效
origin
坐标轴的样式,可选值为upper
和lower
,其对应坐标系样式如下图
※
M
代表rows
,N
代表colums
import matplotlib.pyplot as plt
import matplotlib as mpl
fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)
cmap = mpl.cm.cool
norm = mpl.colors.Normalize(vmin=5, vmax=10)
fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmap),
cax=ax, orientation='horizontal', label='Some Units')
当然,也可以竖起来画
import matplotlib.pyplot as plt
import matplotlib as mpl
fig, ax = plt.subplots(figsize=(1, 6))
fig.subplots_adjust(right=0.5)
cmap = mpl.cm.cool
norm = mpl.colors.Normalize(vmin=5, vmax=10)
fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmap),
cax=ax, orientation='vertical', label='Some Units')
import matplotlib.pyplot as plt
import matplotlib as mpl
fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)
cmap = mpl.colors.ListedColormap(['red', 'green', 'black', 'blue', 'cyan'])
cmap.set_over('0.25')
cmap.set_under('0.75')
bounds = [1, 2, 4, 5, 7, 8]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
fig.colorbar(
mpl.cm.ScalarMappable(cmap=cmap, norm=norm),
cax=ax,
boundaries=[0] + bounds + [13],
extend='both',
ticks=bounds,
spacing='proportional',
orientation='horizontal',
label='Discrete intervals, some other units',
)
import matplotlib.pyplot as plt
import matplotlib as mpl
fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)
cmap = mpl.colors.ListedColormap(['royalblue', 'cyan',
'yellow', 'orange'])
cmap.set_over('red')
cmap.set_under('blue')
bounds = [-1.0, -0.5, 0.0, 0.5, 1.0]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
fig.colorbar(
mpl.cm.ScalarMappable(cmap=cmap, norm=norm),
cax=ax,
boundaries=[-10] + bounds + [10],
extend='both',
extendfrac='auto',
ticks=bounds,
spacing='uniform',
orientation='horizontal',
label='Custom extension lengths, some other units',
)
plt.show()
import matplotlib as mpl
from matplotlib import pyplot as plt
fig, ax = plt.subplots(1, 1)
im = ax.imshow(data, interpolation="bicubic", vmin=vmin, vmax=vmax, cmap="jet")
fig.colorbar(im, ax=ax)
plt.show()
关键是要设置
vmin
和vmax