繁体   English   中英

如何更改热图的字体标签

[英]How to change the font labels of heatmap

我想使用由 Python 生成的以下热图:

import seaborn as sn
import pandas as pd
import matplotlib.pyplot as plt
# CMG
array = [[129,  10,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
         [ 15,  97,  12,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
         [  0,  14,  74,  17,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
         [  0,   0,  24,  74,  25,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
         [  0,   0,   2,  28,  87,   8,   9,   1,   0,   0,   0,   0,   0,   0,   0,   0],
         [  0,   0,   0,   4,  17,  91,  13,   1,   1,   0,   0,   0,   0,   0,   0,   0],
         [  0,   0,   0,   2,   8,  16,  45,  25,  15,   2,   0,   0,   0,   0,   0,   0],
         [  0,   0,   0,   0,   0,  10,  27,  49,  43,   9,   0,   0,   0,   0,   0,   0],
         [  0,   0,   0,   0,   1,   1,   9,  24,  77,  10,   2,   0,   0,   0,   0,   0],
         [  0,   0,   0,   0,   0,   0,   2,   6,  26,  58,  26,   4,   0,   0,   0,   0],
         [  0,   0,   0,   0,   0,   0,   0,   2,   4,  37,  70,  14,   1,   0,   0,   0],
         [  0,   0,   0,   0,   0,   0,   0,   0,   0,   1,  10,  63,  36,   4,   0,   0],
         [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   6,  31,  67,  25,   4,   6],
         [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   1,  18,  41,  25,  10,  19],
         [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   2,  34,  29,  13,  42],
         [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   1,  17,  14,   5,  97]]
df_cm = pd.DataFrame(array, index = [i for i in [r'$s_1$',r'$s_2$',r'$s_3$',r'$s_4$',r'$s_5$',r'$s_6$',r'$s_7$',r'$s_8$',r'$s_9$',r'$s_{10}$',r'$s_{11}$',r'$s_{12}$',r'$s_{13}$',r'$s_{14}$',r'$s_{15}$',r'$s_{16}$']],
                  columns = [i for i in [r'$s_1$',r'$s_2$',r'$s_3$',r'$s_4$',r'$s_5$',r'$s_6$',r'$s_7$',r'$s_8$',r'$s_9$',r'$s_{10}$',r'$s_{11}$',r'$s_{12}$',r'$s_{13}$',r'$s_{14}$',r'$s_{15}$',r'$s_{16}$']])
plt.figure(figsize = (17,14))
#plt.figure()
sn.set(font_scale=2.15)
ax=sn.heatmap(df_cm, 
           annot=False,
           cmap="OrRd",
           annot_kws={"size": 16},cbar=True,
           linewidths=0.5, linecolor='white')
ax.set_aspect(1) # pone la matrix cuadrada
plt.yticks(rotation=0)
ax.xaxis.tick_top() # x axis on top
ax.xaxis.set_label_position('top')
ax.tick_params(length=0)
# plt.title('Confusion Matrix')
plt.savefig('ConfusionCMG.pdf', format='pdf', dpi=1000, bbox_inches='tight')
plt.show()

在 latex 多图中的两列页面中,如下所示:

在此处输入图像描述

8x8 矩阵中的标签很清晰,但 16x16 的标签看起来太小了。

我曾尝试更改 Python 代码中的大小,但在 pdf 文件中,label 太小了。 我想知道如何使两栏页面的标签更清晰。 使字体变大,或旋转顶部标签并使它们变大。

您可以为特定的子图设置轴上刻度标签的字体大小(和旋转)。

这样做的一般方法是:

ticks_font_size = 5
rotation = 90

ax.set_yticklabels(ax.get_yticklabels(), size=ticks_font_size)
ax.set_xticklabels(ax.get_xticklabels(), rotation=rotation, size=ticks_font_size)

(对于您的示例,您可能必须先创建/生成图形和轴。)

这是我为轴设置刻度 label 字体大小的示例(参见In [21]中的 function): https://gitlab.com/mikbuch/lincalc/-/blob/master/ipython_notebooks/Generate_laterality_indices.ipynb

另请参阅这个更简单的示例: https://www.delftstack.com/howto/matplotlib/how-to-set-tick-labels-font-size-in-matplotlib/

将 45 调整为您想要的角度,并将字体大小调整为所需的值:

plt.xticks(rotation=45, ha='right', fontsize=32) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM