python常用的绘图库就是matplotlib,今天在给公司绘图时,偶然间发现matplotlib可以绘制热图,并且十分简洁,拿出来跟大家分享一下。(由于涉及到公司数据问题,这里采用随机数生成数据进行实验)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import random
from matplotlib import pyplot as plt
from matplotlib import cm
from matplotlib import axes
from matplotlib.font_manager import fontproperties
font = fontproperties(fname = '/library/fonts/songti.ttc' )
def draw():
#定义热图的横纵坐标
xlabel = [ 'a' , 'b' , 'c' , 'd' , 'e' ]
ylabel = [ '1' , '2' , '3' , '4' , '5' ]
#准备数据阶段,利用random生成二维数据(5*5)
data = []
for i in range ( 5 ):
temp = []
for j in range ( 5 ):
k = random.randint( 0 , 100 )
temp.append(k)
data.append(temp)
#作图阶段
fig = plt.figure()
#定义画布为1*1个划分,并在第1个位置上进行作图
ax = fig.add_subplot( 111 )
#定义横纵坐标的刻度
ax.set_yticks( range ( len (ylabel)))
ax.set_yticklabels(ylabel, fontproperties = font)
ax.set_xticks( range ( len (xlabel)))
ax.set_xticklabels(xlabel)
#作图并选择热图的颜色填充风格,这里选择hot
im = ax.imshow(data, cmap = plt.cm.hot_r)
#增加右侧的颜色刻度条
plt.colorbar(im)
#增加标题
plt.title( "this is a title" , fontproperties = font)
#show
plt.show()
d = draw()
|
效果图如下:
为了更清晰地看出二维数值矩阵与热图之间的对应关系,我们输出二维矩阵:
[[17, 96, 11, 99, 83], [18, 17, 58, 18, 80], [87, 79, 15, 53, 4], [86, 53, 48, 36, 23], [25, 4, 94, 100, 71]]
从对应关系我们可以看出,图像的左上角为坐标原点,第一行对应的二维矩阵中的第一行数据,以此类推。
同时我们可以看出数值越大的单元,对应热图中的颜色越深。其实这是一个可选项,只需要改变im = ax.imshow(data, cmap=plt.cm.hot_r)中的参数cmap为hot_r,其中_r的意思是就是按照颜色越深,数值越大,如果想数值越大,颜色越浅,只需要去掉_r,直接为hot就行。同时这个hot是热图配色的其中一个主题,主题色参数可选:
- hot 从黑平滑过度到红、橙色和黄色的背景色,然后到白色。
- cool 包含青绿色和品红色的阴影色。从青绿色平滑变化到品红色。
- gray 返回线性灰度色图。
- bone 具有较高的蓝色成分的灰度色图。该色图用于对灰度图添加电子的视图。
- white 全白的单色色图。
- spring 包含品红和黄的阴影颜色。
- summer 包含绿和黄的阴影颜色。
- autumn 从红色平滑变化到橙色,然后到黄色。
- winter 包含蓝和绿的阴影色。
右侧的颜色刻度条colorbar也是可选的,如果不写就不会显示
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/coder_Gray/article/details/81867639