代码之家  ›  专栏  ›  技术社区  ›  sharky

Matplotlib和Seaborn Heatmap在Jupyter到SaveFig中呈现不同的效果(标签被切断)

  •  2
  • sharky  · 技术社区  · 6 年前

    使用jupyter 4.4.0和python 3.6.5(anaconda),我生成一个heatmap,如下所示:

    import seaborn as sns
    将numpy导入为np
    将熊猫作为PD导入
    导入Matplotlib
    将matplotlib.pyplot导入为plt
    
    #生成包含随机值和长标签的9x4矩阵
    x,y= 9,4
    plt.图(FigSize=(x,y))
    分数=np.随机。随机((y,x))
    cols=['loooooooooong_label_x_ud'%i用于范围(x)中的i]
    rows=['loooooooooong_label_y_uud'%i用于反转的i(范围(y))]
    
    #使用带有旋转标签的Seaborn生成heatmap
    ax=sns.heatmap(pd.dataframe(scores,columns=cols,index=rows),annot=true,square=true,cbar=false,cmap='ylgnbu',xtickLabels=true,ytickLabels=true)
    ax.set ytickLabels(ax.get ytickLabels(),rotation=0,fontsize=8)
    ax.set xtickLabels(ax.get xtickLabels(),rotation=45,fontSize=8,rotation_mode='anchor',ha='right')
    < /代码> 
    
    

    在笔记本中,Jupyter自动呈现此图像,如图所示:

    这看起来正是我想要的。但是,当我采取下一步并将绘图保存到文件时:

    ax.figure.savefig('hmx.png')
    < /代码> 
    
    

    此文件显示为:

    差异似乎是:

    • 保存的图像会向下和向左移动,从而切断标签;
    • Jupyter渲染的PNG具有透明背景,而保存的图像没有(它具有白色背景)。

    我想知道如何将jupyter生成的图像保存到文件中,或者更好的是,当我尝试自己保存png时,我做错了什么。

    在笔记本中,Jupyter自动呈现此图像,如图所示:

    Jupyter-rendered seaborn/matplotlib heatmap

    这看起来正是我想要的。但是,当我采取下一步并将绘图保存到文件时:

    ax.figure.savefig('hmx.png')
    

    此文件显示为:

    seaborn/matplotlib heatmap saved to PNG directly

    差异似乎是:

    • 保存的图像会向下和向左移动,切断标签;
    • Jupyter渲染的PNG有一个透明的背景,而保存的图像没有(它有一个白色的背景)。

    我想知道如何将jupyter生成的图像保存到文件中,或者更好的是,当我试图自己保存png时,我做错了什么。

    1 回复  |  直到 6 年前
        1
  •  2
  •   sharky    6 年前
    固定!

    ax.figure.savefig('hmx.png',transparent=true,bbox_inches='tight')
    
    
    

    enter image description here