最近投SCI论文的时候,有些实验结果需要热力图展示,所以专门试了一下如何用python绘制热力图,发现简单好用,下面分享给大家具体方法。
一、安装python库
需要安装pandas、seaborn、matplotlib安装包依赖,均用pip一键安装即可,然后导入相关包。
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt
二、绘制热力图
具体实现代码如下,代码中的注释部分包括修改字体大小,修改具体内容、行列标签等:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Author thesky
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.family'] = 'SimHei'
# 数据
data = [[91.1, 93.6, 93.8],
[91.4, 93.7, 93.6],
[92.6, 93.7, 93.6],
[93.6, 93.8, 93.5],
[93.2, 93.6, 93.4]]
# 创建 DataFrame
df = pd.DataFrame(data, columns=['0.001', '0.0001', '0.00001'], index=['1.0', '0.1', '0.01', '0.001', '0.0001'])
# 制作热力图
plt.figure(figsize=(10, 7))
sns.set(font_scale=1.2) # 设置字体比例
# custom_colors = sns.diverging_palette(20, 220, n=256, as_cmap=True) # 创建自定义的调色板
custom_colors = ["#8B4513", "#FF4500"] # 棕色和红色
# 设置横轴和纵轴标签
plt.xlabel('adv_eps', fontsize=20) # 设置标签字体大小
plt.ylabel('adv_lr', fontsize=20)
# heatmap = sns.heatmap(df, annot=True, cmap='YlGnBu', fmt='.1f') # 保留一位小数
heatmap = sns.heatmap(df, annot=True, cmap='YlOrRd', fmt='.1f')
# 设置横轴和纵轴标签
plt.xlabel('adv_eps')
plt.ylabel('adv_lr')
# 添加标题
plt.title('IMDB(Baseline 93.3)', fontsize=20)
plt.show()
效果图如下:
上图是红色效果,值越大则红色深度越明显。若想改成其他颜色,只需修改这行代码:
heatmap = sns.heatmap(df, annot=True, cmap='YlOrRd', fmt='.1f')
修改为:
heatmap = sns.heatmap(df, annot=True, cmap='YlGnBu', fmt='.1f')
效果图如下:
具体实现过程中可以将代码中data改为自己数据,然后行列的标签根据自实际需要进行修改。