如何为保存的matplotlib/seaborn图表添加角落对齐文本
Seaborn热力图添加画布固定位置角落文本实现方案
完整实现代码
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # Jupyter环境请取消注释下一行实现内嵌显示 # %matplotlib inline np.random.seed(2021) data = pd.DataFrame(np.random.randint(0, 5, (3, 5)))\ .rename({0: "Supercalifragilisticexpialidocious", 1: "Humuhumunukunukuapua'a", 2: "Hippopotomonstrosesquipedaliophobia" }) # 可自定义画布尺寸 plt.figure(figsize=(10, 6)) sns.heatmap(data) # 固定画布边距:left可根据最长y轴标签长度调整,预留足够左侧空间 plt.subplots_adjust(left=0.35, right=0.95, top=0.95, bottom=0.1) # 添加四个角落固定位置文本 plt.figtext(0.01, 0.99, 'GHI', ha='left', va='top', fontsize=12) # 左上 plt.figtext(0.01, 0.01, 'JKL', ha='left', va='bottom', fontsize=12) # 左下 plt.figtext(0.99, 0.99, 'ABC', ha='right', va='top', fontsize=12) # 右上 plt.figtext(0.99, 0.01, 'DEF', ha='right', va='bottom', fontsize=12) # 右下 # 命令行环境取消注释下一行可弹出预览窗口 # plt.show() # 保存图片,dpi可按需调整清晰度 plt.savefig("dave.png", dpi=300)
实现逻辑说明
- 固定画布边距:通过
plt.subplots_adjust(left=xxx)强制锁定左侧留白宽度,无论y轴标签长短,左侧都会预留固定空间放标注文本,避免左侧标注位移。如果y轴标签更长,只需调大left参数值即可。 - figtext参数说明:
- 前两个参数为画布归一化坐标,
(0,0)对应画布左下角,(1,1)对应画布右上角 ha参数控制水平对齐方式:left表示文本左边缘对齐x坐标,right表示文本右边缘对齐x坐标va参数控制垂直对齐方式:top表示文本顶部对齐y坐标,bottom表示文本底部对齐y坐标- 坐标设置为
0.01/0.99是为了让文本和画布边缘保留少量空隙,避免被裁剪
- 前两个参数为画布归一化坐标,
附加需求解决
- Jupyter Notebook显示:在代码开头添加
%matplotlib inline魔法命令即可直接在单元格下方显示带标注的图表,如需交互功能可替换为%matplotlib notebook - 命令行弹出预览:在
plt.savefig前添加plt.show()即可运行脚本时自动弹出预览窗口
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

