如何减小pandas savefig生成的seaborn热图内部数字字体大小
调整seaborn相关性热图标注字号的方法
问题场景
- 首先通过pandas生成相关性矩阵,代码如下:
corr=data.corr()
- 之后使用seaborn绘制上三角相关性热图并保存,代码如下:
plt.figure(figsize=(16, 6)) mask = np.triu(np.ones_like(data.corr(), dtype=np.bool)) heatmap = sns.heatmap(data.corr(), mask=mask, vmin=-1, vmax=1, annot=True, cmap='BrBG') heatmap.set_title('Correlation Heatmap', fontdict={'fontsize':18}, pad=16); plt.savefig(dataQualityCheck+'correlationHeatmap.png', dpi=300, bbox_inches='tight', font = {'family' : 'normal', 'weight' : 'bold', 'size' : 8})
- 生成的热图效果:

- 实际需求:减小热图单元格内部标注数字的字体大小。
解决方案
注意:你写在plt.savefig()中的font是无效参数,savefig方法本身不接收该参数,自然无法控制热图内的标注字号。 要调整内部标注数字大小有两种常用方法:
- 方法1:绘图时直接通过
annot_kws参数指定字号
在调用sns.heatmap()时传入annot_kws参数,该参数接收字典格式的文本属性配置,直接设置size为你需要的字号即可,数值越小字体越小,示例配置如下:
如果需要同时调整标注的字重、字体,也可以直接在字典中追加配置,比如heatmap = sns.heatmap( data.corr(), mask=mask, vmin=-1, vmax=1, annot=True, cmap='BrBG', annot_kws={'size': 8} # 将内部标注字号设置为8,可按需调整数值 )annot_kws={'size':8, 'weight':'bold', 'family':'sans-serif'}。 - 方法2:绘图后遍历文本对象修改字号
如果已经生成了热图对象不想重绘,可以直接遍历热图包含的所有标注文本,逐个设置字号:for text in heatmap.texts: text.set_fontsize(8) # 替换为你需要的字号值
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

