Seaborn热图裁剪y轴刻度标签

时间:2020-07-03 14:53:13

标签: python seaborn

我正在尝试使用具有以下行的DataFrame创建热图:

у     7.14e-02  4.29e-01  5.00e-01
ф     0.00e+00  1.00e+00  0.00e+00
х     0.00e+00  1.00e+00  0.00e+00
ц     0.00e+00  1.00e+00  0.00e+00
ч     0.00e+00  9.75e-01  2.50e-02
ш     0.00e+00  1.00e+00  0.00e+00
щ     0.00e+00  1.00e+00  0.00e+00

但是,当我尝试根据这些数据创建一个热图时,我最终得到了一个看起来像这样的y轴(注意,字母у,ф和ш的底部/右侧被剪掉了)。

y-axis

这是我用来初始化它的代码:

fig, ax = plt.subplots(figsize=(15, 15)
plot = sns.heatmap(df_result, annot=True, fmt=".2f")

编辑:我已经测试过将西里尔字母'у'替换为拉丁字母'y',并且不再被剪切。有什么原因会导致该问题专门针对西里尔字母?

2 个答案:

答案 0 :(得分:4)

在读取csv时,问题可能出在编码中。

这是csv:

name,value1,value2,value3
у, 7.14e-02, 4.29e-01, 5.00e-01
ф, 0.00e+00, 1.00e+00, 0.00e+00
х, 0.00e+00, 1.00e+00, 0.00e+00
ц, 0.00e+00, 1.00e+00, 0.00e+00
ч, 0.00e+00, 9.75e-01, 2.50e-02
ш, 0.00e+00, 1.00e+00, 0.00e+00
щ, 0.00e+00, 1.00e+00, 0.00e+00

以以下方式读取csv:

df = pd.read_csv("data.csv",encoding='utf-8')

将名称列表另存为y_labels和图形:

y_labels = df['name'].tolist()

fig, ax = plt.subplots(figsize = (15, 15))
ax  = sns.heatmap(df[['value1','value2','value3']],
yticklabels =  y_labels)

y轴标签没有被剪掉。 enter image description here

答案 1 :(得分:0)

旋转yticks将有助于剪切。

degrees = 90
plt.yticks(rotation=degrees)

或者您可以为yaxis添加一些填充。

n = 15
ax.tick_params(axis='y', which='major', pad=n)

可以在here中找到有关matplotlib填充的文档。