import numpy as np
from matplotlib import pyplot as plt
from matplotlib import cm
from matplotlib import axes
#plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文
#plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
def draw(xLabel,yLabel,heatlist,title):
#作图阶段
fig = plt.figure(dpi =200)
#定义画布为1*1个划分,并在第1个位置上进行作图
ax = fig.add_subplot(111)
#定义横纵坐标的刻度
ax.set_xticks(np.arange(len(xLabel)), labels=xLabel)
ax.set_yticks(np.arange(len(yLabel)), labels=yLabel)
#作图并选择热图的颜色填充风格,这里选择hot
im = ax.imshow(heatlist, cmap=plt.cm.hot_r)
# Rotate the tick labels and set their alignment.
plt.setp(ax.get_xticklabels(), rotation=45, ha="right",rotation_mode="anchor")
# Loop over data dimensions and create text annotations.
for i in range(len(yLabel)):
for j in range(len(xLabel)):
text = ax.text(j, i, heatlist[i, j],ha="center", va="center", color="w")
#增加右侧的颜色刻度条
plt.colorbar(im,fraction=0.025, pad=0.05)
#增加标题
plt.title(title)
plt.xlabel(u"Time(s)",fontsize=15) #X轴标签
plt.ylabel("Throughput (×10 Mb/s)",fontsize=15) #Y轴标签
#show
plt.show()
heatlist1 = np.array([[1, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 0],
[0, 0, 1, 0, 0, 1, 0, 2, 0, 0, 1, 0, 0, 1, 2, 4, 4, 3, 7, 10, 2, 0, 1, 3],
[25, 8, 0, 6, 7, 12, 6, 7, 19, 1, 4, 0, 3, 3, 6, 8, 21, 9, 0, 2, 5, 5, 4, 23],
[3, 4,6, 16, 38, 21, 8, 2, 3, 9, 17, 7, 12, 13, 19, 35, 42, 12, 1, 8, 17, 5, 28, 21],
[27, 24, 5, 24, 28, 23, 23, 45, 93, 59, 56, 31, 12, 20, 16, 23, 21, 20, 6, 4, 15, 16, 11, 8],
[11, 7, 21, 18, 35, 79, 59, 30, 14, 22, 38, 13, 23, 29, 42, 61, 80, 74, 31, 19, 42, 60, 69, 49],
[22, 15, 6, 15, 3, 4, 13, 5, 13, 12, 26, 22, 53, 48, 22, 43, 42, 65, 80, 38, 49, 51, 40, 16],
[5, 5, 7, 1,0,5, 25, 0,1, 3, 2,0, 3, 10, 8, 1, 4, 8, 3, 9, 1, 2, 6, 13],
[0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0],
[0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]])
#定义热图的横纵坐标
xLabel1 = ["0", "1", "2","3", "4", "5", "6","7", "8", "9","10", "11", "12", "13","14", "15","16", "17", "18", "19","20", "21", "22","23"]
yLabel1 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
title1='one day raining one year'
d = draw(xLabel1,yLabel1,heatlist1,title1)
[1] Creating annotated heatmaps — Matplotlib 3.5.3 documentation
[2] ax.imshow(heatlist, cmap=plt.cm.hot_r)这里可以根据需要修改,如下:
参数cmap为hot_r,其中_r的意思是就是按照颜色越深,数值越大,如果想数值越大,颜色越浅,只需要去掉_r,直接为hot就行。
hot 从黑平滑过度到红、橙色和黄色的背景色,然后到白色。
cool 包含青绿色和品红色的阴影色。从青绿色平滑变化到品红色。
gray 返回线性灰度色图。
bone 具有较高的蓝色成分的灰度色图。该色图用于对灰度图添加电子的视图。
white 全白的单色色图。
spring 包含品红和黄的阴影颜色。
summer 包含绿和黄的阴影颜色。
autumn 从红色平滑变化到橙色,然后到黄色。
winter 包含蓝和绿的阴影色。