海のプロットの図のサイズを変更するにはどうすればよいですか?


223

印刷に適するように画像のサイズを変更するにはどうすればよいですか?

たとえば、横向きで11.7インチx 8.27インチのA4用紙を使用したいとします。

回答:


196

フィギュアの大きさを指定して、matplotlibフィギュアオブジェクトとAxesオブジェクトを事前に作成する必要があります。

from matplotlib import pyplot
import seaborn

import mylib

a4_dims = (11.7, 8.27)
df = mylib.load_data()
fig, ax = pyplot.subplots(figsize=a4_dims)
seaborn.violinplot(ax=ax, data=df, **violin_options)

7
このソリューションは、次のコード(異なる種類のプロット)では機能しないようです。何か案は?「mylib」は、データを格納するライブラリにすぎず、このコードでは不要であると想定しています。sns.jointplot(memoryPrice ['price']、memoryPrice ['Memory']) `
TMWP

3
JointplotはFigureレベルの方法であるため、@ TMWPの場合、この回答は機能しません。以下の回答を参照してください。
elz

5
この答えは、例えば、入力として斧を受け入れないものをプロットタイプでは動作しませんsns.lmplot()
クリス・

2
seabornでプロットサイズを使用して設定されるべきであるheightaspect、ここで説明したようにパラメータをstackoverflow.com/a/51602446/2412831
LeandroOrdonez

@LeandroOrdonezこれは、軸レベルの関数には実際には適用できません。
ポールH

234

seaborn メソッドのrcキーを使用してパラメーターにディクショナリーを渡すことにより、Figureサイズを設定することもできます。'figure.figsize'set

import seaborn as sns

sns.set(rc={'figure.figsize':(11.7,8.27)})

他の代替は、使用することとすることができるfigure.figsizercParams以下のようにセットフィギュアサイズ:

from matplotlib import rcParams

# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27

詳細については、matplotlibのドキュメントを参照してください


5
他のソリューションとは異なり、このソリューションはプロットを定義する特定の方法を想定していません。ありがとう。
LoMaPh 2018

6
sns.set()を呼び出すと、Figureスタイルはデフォルトでmatplotlibのデフォルトではなくsnsのデフォルトに設定されます。たとえば、図の背景が突然、灰色の背景に白いグリッドが表示されることに注意してください。seaborn.pydata.org/を参照してください。tutorial / aesthetics.html。また、これは私のプロット(sns.pairplot)のサイズに影響を与えませんでした。
Melissa、

sns.boxplotとしての私のものではありません
Gordon

その@メリッサをありがとう。これにより、.set()以前に電話しなければならないことに気づきました.set_style()
jorijnsmit

89

コンテキストを設定するposterか、手動で設定できfig_sizeます。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

np.random.seed(0)
n, p = 40, 8
d = np.random.normal(0, 2, (n, p))
d += np.log(np.arange(1, p + 1)) * -5 + 10


# plot
sns.set_style('ticks')
fig, ax = plt.subplots()
# the size of A4 paper
fig.set_size_inches(11.7, 8.27)
sns.violinplot(data=d, inner="points", ax=ax)    
sns.despine()

fig.savefig('example.png')

ここに画像の説明を入力してください


3
この答えは、例えば、入力として斧を受け入れないものをプロットタイプでは動作しませんsns.lmplot()
クリス・

Chrisの答えを拡張するために、一部の海図プロットは複数の軸を持つ複合図を生成するため、単一の軸を引数として使用できません。
Marmaduke、

73

あなたはseabornで「フィギュアレベル」メソッドに渡すしようとしている場合(たとえばことに注意してくださいlmplotcatplot/ factorplotjointplot)あなたがして使用して、引数の中に、これを指定する必要がありますすることができますheightaspect

sns.catplot(data=df, x='xvar', y='yvar', 
    hue='hue_bar', height=8.27, aspect=11.7/8.27)

図レベルのメソッドがAxesの仕様に従っていないという事実の詳細については、https://github.com/mwaskom/seaborn/issues/488およびmatplotlibオブジェクト指向インターフェイス使用したseabornでのプロットを参照してください


11
これは、これまでのところ、axを引数として受け入れないsnsプロットを正しく処理する唯一の回答です。
Melissa

高さとアスペクトは、単一の「ファセット」、つまりサブプロットの寸法を制御することに注意してください。したがって、これは図全体の寸法を直接調整しません。
バーニー

43

最初にmatplotlibをインポートし、それを使用して図のサイズを設定します

from matplotlib import pyplot as plt
import seaborn as sns

plt.figure(figsize=(15,8))
ax = sns.barplot(x="Word", y="Frequency", data=boxdata)

20

これは以下を使用して行うことができます:

plt.figure(figsize=(15,8))
sns.kdeplot(data,shade=True)

19

これも機能します。

from matplotlib import pyplot as plt
import seaborn as sns    

plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)

16

私のプロット(sns factorplot)では、提案された答えはうまくいきませんでした。

したがって、私は使用します

plt.gcf().set_size_inches(11.7, 8.27)

seabornのあるプロットの直後(つまり、axをseabornに渡したり、rc設定を変更したりする必要はありません)。


1
これは、FacetGridで機能する唯一のソリューションですpython g = sns.FacetGrid(df.set_index('category'), col="id") pyplot.gcf().set_size_inches(11.7, 8.27) g.map(lambda data, color: data.plot.barh(color=color), "count")
Nicolas78 '16

こっちも一緒。ように思えるsns.FacetGrid計算(によって設定された値に応じて図のサイズを設定しますheightaspect)とseabornプロットが動作する直後の図のサイズを変更します。そして、図のサイズを変更した後、プロットの他の微調整が行われる可能性があります
Yunting Zhao

16

マルチプロットグリッドオブジェクトを返す「図レベル」メソッドに関するelz回答に加えて、次のアプローチを使用して、図の高さと幅を明示的に(つまり、縦横比を使用せずに)設定できます。

import seaborn as sns 

g = sns.catplot(data=df, x='xvar', y='yvar', hue='hue_bar')
g.fig.set_figwidth(8.27)
g.fig.set_figheight(11.7)

set_figwidthそしてset_figheightグリッドオブジェクトのために働きます。>>> seabornをインポート>>> matplotlib.pyplotをpyplotとしてインポート>>> tips = seaborn.load_dataset( "tips")>>> g = seaborn.FacetGrid(tips、col = "time"、row = "smoker") >>> g = g.map(pyplot.hist、 "total_bill")>>> g.fig.set_figwidth(10)>>> g.fig.set_figheight(10)
Paul Rougieux

1
おそらくAPIは変更されましたが、私にとってはg.fig.set_figwidthではなくg.figure.set_figwidthでした。私はmatplotlibバージョン3.1.0とseaborn 0.9.0を使用しています
NateW

6

Paul HとJ. Liの上位の回答は、すべての種類の海の人物には当てはまりません。以下のためにFacetGrid(例えば、タイプsns.lmplot())、使用sizeおよびaspectパラメータ。

Size アスペクト比を維持しながら、高さと幅の両方を変更します。

Aspect 高さを一定に保ち、幅のみを変更します。

これらの2つのパラメーターを使用して、いつでも希望のサイズを取得できます。

クレジット:https : //stackoverflow.com/a/28765059/3901029

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.