停止seaborn将多个图形相互叠加

问题描述 投票:0回答:4

我开始学习一些Python(一直在使用R)进行数据分析。我正在尝试使用

seaborn
创建两个图,但它始终将第二个图保存在第一个图之上。我该如何阻止这种行为?

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')
python plot seaborn
4个回答
107
投票

为了做到这一点,你必须开始一个新的图形。有多种方法可以做到这一点,假设您有

matplotlib
。还要摆脱
get_figure()
,您可以从那里使用
plt.savefig()

方法1

使用

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

方法2

每次之前请致电

plt.figure()

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

21
投票

我同意之前的评论,即导入

matplotlib.pyplot
不是最好的软件工程实践,因为它公开了底层库。当我在循环中创建和保存绘图时,我需要清除图形,发现现在只需导入
seaborn
即可轻松完成:

自0.11版本以来:

import seaborn as sns
import numpy as np

data = np.random.normal(size=100)
path = "/path/to/img/plot.png"

plot = sns.displot(data) # also works with histplot() etc
plot.fig.savefig(path)
plot.fig.clf() # this clears the figure

# ... continue with next figure

带有循环的替代示例:

import seaborn as sns
import numpy as np

for i in range(3):
  data = np.random.normal(size=100)
  path = "/path/to/img/plot2_{0:01d}.png".format(i)

  plot = sns.displot(data)
  plot.fig.savefig(path)
  plot.fig.clf() # this clears the figure

0.11版本之前(原帖):

import seaborn as sns
import numpy as np

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

13
投票

创建特定的图形并在其上绘制:

import matplotlib.pyplot as plt
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
投票

我发现如果关闭交互,seaborn 会正常绘制热图。https://i.sstatic.net/LteoZ.png

© www.soinside.com 2019 - 2024. All rights reserved.