web-dev-qa-db-ja.com

シーボーンが複数の図形を重ねて描画するのをやめる

私はデータ分析のためにpython(Rを使用中))を少し学び始めています。seabornを使用して2つのプロットを作成しようとしていますが、この動作を停止するにはどうすればよいですか?

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

それを行うには、新しい図を開始する必要があります。 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')
_
37
Leb

特定の図を作成し、それらにプロットします。

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

matplotlib.pyplotのインポートは、基礎となるライブラリを公開するため、ソフトウェアエンジニアリングのベストプラクティスではないという以前のコメントに同意します。プロットをループで作成して保存しているときに、図をクリアする必要があり、seabornのみをインポートすることで簡単に実行できることがわかりました。

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
2
MF.OX