一文总结Python绘制的10种热力图
共 3103字,需浏览 7分钟
·
2024-05-01 07:53
你好,我是郭震
首先祝你五一快乐!
今天这篇汇总,Python绘制热力图,重点聚焦在不同样式的热力图上。
使用seaborn库,它是一个基于Matplotlib的数据可视化库,它提供了一种高级接口来绘制吸引人的统计图形。
数据准备阶段,代码如下,设置随机种子,确保每次运行数据一致。
# 设置随机种子
np.random.seed(42)
data = np.random.rand(10, 12)
1 coolwarm样式
annot=True
:不显示每个单元格的数据值
# 创建热力图
plt.figure(figsize=(10, 8))
sns.heatmap(data, annot=False, cmap='coolwarm')
plt.title('Seaborn Heatmap Example')
plt.show()
热力图如下:
2 viridis样式
其他代码与1相同,仅有一个cmap
参数调整:
sns.heatmap(data, annot=False, cmap='viridis')
热力图如下:
3 plasma样式
其他代码与1相同,仅有一个cmap
参数调整:
sns.heatmap(data, annot=False, cmap='plasma')
4 spring样式
sns.heatmap(data, annot=False, cmap='spring')
5 winter样式
sns.heatmap(data, annot=False, cmap='winter')
6 自定义颜色样式
# 创建自定义颜色映射
colors = ["blue", "green", "red"]
cmap = LinearSegmentedColormap.from_list("mycmap", colors)
# 数据
np.random.seed(42)
data = np.random.rand(10, 12)
# 绘制热力图
plt.figure(figsize=(8, 6))
sns.heatmap(data, cmap=cmap, annot=False)
plt.title('Custom Colormap Heatmap')
plt.show()
7 添加注解
只需改变下面一行代码:
sns.heatmap(data, cmap=cmap, annot=True)
8 掩码显示
只显示大于0.7的颜色块:
# 创建一个掩码,只显示大于0.7的值
mask = data < 0.7
plt.figure(figsize=(8, 6))
sns.heatmap(data, mask=mask, cmap='viridis', annot=False)
plt.title('Masked Heatmap for Values > 0.7')
plt.show()
9 小于某值显示特定颜色
# 'lightgrey'用于小于0.7的值,'viridis'用于大于等于0.7的值
colors = ["lightgrey"] + sns.color_palette("viridis", as_cmap=True)(np.linspace(0, 1, 256)).tolist()
cmap = LinearSegmentedColormap.from_list("custom_cmap", colors)
norm = plt.Normalize(0.7, 1)
10 多热力图
# 定义颜色映射
norm = plt.Normalize(0.7, 1)
# 创建图和子图网格
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(12, 10))
# 绘制热力图
sns.heatmap(data1, cmap='coolwarm', norm=norm, annot=False, ax=axs[0, 0], cbar=False)
sns.heatmap(data2, cmap='viridis', norm=norm, annot=False, ax=axs[0, 1], cbar=False)
sns.heatmap(data3, cmap='plasma', norm=norm, annot=False, ax=axs[1, 0], cbar=False)
sns.heatmap(data4, cmap='spring', norm=norm, annot=False, ax=axs[1, 1], cbar=False)
# 设置每个子图的标题
axs[0, 0].set_title('Heatmap 1')
axs[0, 1].set_title('Heatmap 2')
axs[1, 0].set_title('Heatmap 3')
axs[1, 1].set_title('Heatmap 4')
# 调整布局
plt.tight_layout()
plt.show()
以上,希望对你有帮助。
评论