如何在Python中绘制垂直热力图?附参考样图
在Python中绘制垂直热力图
你要的这种垂直热力图,本质就是把常规热力图的布局转成纵向排列,用seaborn或者matplotlib都能实现,下面给两种实用的实现方法:
方法一:用Seaborn Heatmap改造
Seaborn的热力图默认是横向,我们通过调整坐标轴和布局就能转成垂直样式:
import seaborn as sns import matplotlib.pyplot as plt import numpy as np # 替换成你的真实数据 data = np.random.rand(10, 5) # 10个类别,5个数值维度 category_names = [f"类别{i+1}" for i in range(10)] value_names = [f"指标{i+1}" for i in range(5)] plt.figure(figsize=(7, 5)) ax = sns.heatmap(data, annot=True, cmap="RdYlBu_r", cbar=True) # 调整标签方向和位置 ax.set_yticklabels(category_names, rotation=0) ax.set_xticklabels(value_names, rotation=90) # 反转y轴让类别从上到下排列(可选,按需调整) plt.gca().invert_yaxis() plt.xlabel("指标") plt.ylabel("类别") plt.title("垂直热力图") plt.tight_layout() plt.show()
方法二:用Matplotlib Imshow直接绘制
直接用matplotlib的imshow控制布局,灵活性更高:
import matplotlib.pyplot as plt import numpy as np # 模拟数据,替换成你自己的真实数据 data = np.random.rand(10, 5) category_names = [f"类别{i+1}" for i in range(10)] value_names = [f"指标{i+1}" for i in range(5)] fig, ax = plt.subplots(figsize=(7, 5)) im = ax.imshow(data, cmap="RdYlBu_r", aspect="auto", origin='lower') # 设置坐标轴标签 ax.set_yticks(np.arange(len(category_names))) ax.set_yticklabels(category_names) ax.set_xticks(np.arange(len(value_names))) ax.set_xticklabels(value_names, rotation=90) # 添加颜色条 cbar = fig.colorbar(im, ax=ax) cbar.set_label("数值大小") plt.xlabel("指标") plt.ylabel("类别") plt.title("垂直热力图") plt.tight_layout() plt.show()
适配参考图的小技巧
- 调整
cmap参数切换配色,比如"viridis"、"coolwarm"都能匹配不同风格; - 不需要显示格子数值的话,把
annot=True改成annot=False; - 类别过多时,调大
figsize的第二个参数(高度)避免标签重叠。
内容的提问来源于stack exchange,提问作者Nis
相关产品推荐
相关产品推荐

