How to save a Seaborn plot into a file

后端 未结 10 1061
庸人自扰
庸人自扰 2020-12-07 08:43

I tried the following code (test_seaborn.py):

import matplotlib
matplotlib.use(\'Agg\')
import matplotlib.pyplot as plt
matplotlib.style.use(\'g         


        
相关标签:
10条回答
  • 2020-12-07 09:04

    The suggested solutions are incompatible with Seaborn 0.8.1

    giving the following errors because the Seaborn interface has changed:

    AttributeError: 'AxesSubplot' object has no attribute 'fig'
    When trying to access the figure
    
    AttributeError: 'AxesSubplot' object has no attribute 'savefig'
    when trying to use the savefig directly as a function
    

    The following calls allow you to access the figure (Seaborn 0.8.1 compatible):

    swarm_plot = sns.swarmplot(...)
    fig = swarm_plot.get_figure()
    fig.savefig(...) 
    

    as seen previously in this answer.

    UPDATE: I have recently used PairGrid object from seaborn to generate a plot similar to the one in this example. In this case, since GridPlot is not a plot object like, for example, sns.swarmplot, it has no get_figure() function. It is possible to directly access the matplotlib figure by

    fig = myGridPlotObject.fig
    

    Like previously suggested in other posts in this thread.

    0 讨论(0)
  • 2020-12-07 09:12

    Fewer lines for 2019 searchers:

    import matplotlib.pyplot as plt
    import seaborn as sns
    
    df = sns.load_dataset('iris')
    sns_plot = sns.pairplot(df, hue='species', height=2.5)
    plt.savefig('output.png')
    

    UPDATE NOTE: size was changed to height.

    0 讨论(0)
  • 2020-12-07 09:13

    Some of the above solutions did not work for me. The .fig attribute was not found when I tried that and I was unable to use .savefig() directly. However, what did work was:

    sns_plot.figure.savefig("output.png")
    

    I am a newer Python user, so I do not know if this is due to an update. I wanted to mention it in case anybody else runs into the same issues as I did.

    0 讨论(0)
  • 2020-12-07 09:16

    Its also possible to just create a matplotlib figure object and then use plt.savefig(...):

    from matplotlib import pyplot as plt
    import seaborn as sns
    import pandas as pd
    
    df = sns.load_dataset('iris')
    plt.figure() # Push new figure on stack
    sns_plot = sns.pairplot(df, hue='species', size=2.5)
    plt.savefig('output.png') # Save that figure
    
    0 讨论(0)
提交回复
热议问题