使用seaborn
包与矩阵中的数据,绘制热力图
import matplotlib.pyplot as plt
import seaborn as sns
import os
import pandas as pd
import datetime as dt
def heatmap_fig(val_matrix, columns, rows, name):
# 导入数据
cs = val_matrix
cs_frame = pd.DataFrame(cs, index=rows, columns=columns)
plt.figure(figsize=(60, 56))
f, ax = plt.subplots(figsize=(10, 8))
sns.heatmap(cs_frame, annot=True, annot_kws={'size': 12}, square=True, cmap='Reds', linewidths=0.5, vmin=0, vmax=1) # 设定图像字体大小
ax.tick_params(labelsize=18) # 设定坐标轴label字体大小
ax.set_yticklabels(ax.get_yticklabels(), rotation=0) # 设定y轴label是否水平
# 设定文件路径与文件名
time_now = dt.datetime.strftime(dt.datetime.now(), '%Y%m%d_%H%M%S')
fig_path = "./figure/"
if not os.path.exists(fig_path):
os.makedirs(fig_path)
fig_file = fig_path + time_now + "_" + name + ".pdf"
# 保存图像
plt.savefig(fig_file, dpi=600, bbox_inches='tight')
plt.show()
plt.clf()
matrix_test = [[1, 0.1, 0.01], [0.1, 1, 0.5]]
col = ['col1', 'col2', 'col3']
row = ['row1', 'row2']
heatmap_fig(matrix_test, col, row, 'test)
# 矩阵的行列维度、要分别对应col、row的长度
运行结果:
不添加该语句的效果:# ax.set_yticklabels(ax.get_yticklabels(), rotation=0)
seaborn
中还有很多其它制图的细节,后面继续学习其使用。