Stop seaborn plotting multiple figures on top of one another

前端 未结 3 652
太阳男子
太阳男子 2020-12-23 20:21

I\'m starting to learn a bit of python (been using R) for data analysis. I\'m trying to create two plots using seaborn, but it keeps saving the second on top of

相关标签:
3条回答
  • 2020-12-23 20:52

    Create specific figures and plot onto them:

    import seaborn as sns
    iris = sns.load_dataset('iris')
    
    length_fig, length_ax = plt.subplots()
    sns.barplot(x='sepal_length', y='species', data=iris, ax=length_ax)
    length_fig.savefig('ex1.pdf')
    
    width_fig, width_ax = plt.subplots()
    sns.barplot(x='sepal_width', y='species', data=iris, ax=width_ax)
    width_fig.savefig('ex2.pdf')
    
    0 讨论(0)
  • 2020-12-23 20:58

    I agree with a previous comment that importing matplotlib.pyplot is not the best software engineering practice as it exposes the underlying library. As I was creating and saving plots in a loop, then I needed to clear the figure and found out that this can now be easily done by importing seaborn only:

    import seaborn as sns
    
    data = np.random.normal(size=100)
    path = "/path/to/img/plot.png"
    
    plot = sns.distplot(data)
    plot.get_figure().savefig(path)
    plot.get_figure().clf() # this clears the figure
    
    # ... continue with next figure
    
    0 讨论(0)
  • 2020-12-23 21:06

    You have to start a new figure in order to do that. There are multiple ways to do that, assuming you have matplotlib. Also get rid of get_figure() and you can use plt.savefig() from there.

    Method 1

    Use plt.clf()

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    iris = sns.load_dataset('iris')
    
    length_plot = sns.barplot(x='sepal_length', y='species', data=iris)
    plt.savefig('ex1.pdf')
    plt.clf()
    width_plot = sns.barplot(x='sepal_width', y='species', data=iris)
    plt.savefig('ex2.pdf')
    

    Method 2

    Call plt.figure() before each one

    plt.figure()
    length_plot = sns.barplot(x='sepal_length', y='species', data=iris)
    plt.savefig('ex1.pdf')
    plt.figure()
    width_plot = sns.barplot(x='sepal_width', y='species', data=iris)
    plt.savefig('ex2.pdf')
    
    0 讨论(0)
提交回复
热议问题