Search code examples
pythonplotseaborn

Stop seaborn plotting multiple figures on top of one another


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 the first. How do I stop this behavior?

import seaborn as sns
iris = sns.load_dataset('iris')

length_plot = sns.barplot(x='sepal_length', y='species', data=iris).get_figure()
length_plot.savefig('ex1.pdf')
width_plot = sns.barplot(x='sepal_width', y='species', data=iris).get_figure()
width_plot.savefig('ex2.pdf')

Solution

  • 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')