seaborn 플롯의 그림 크기를 어떻게 변경합니까?


223

인쇄하기에 적합하도록 이미지의 크기를 어떻게 변경합니까?

예를 들어 가로 방향으로 크기가 11.7 인치 x 8.27 인치 인 A4 용지에 사용하고 싶습니다.

답변:


197

그림의 크기를 지정하여 matplotlib Figure 및 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"는 데이터를 저장 한 라이브러리 일 뿐이며이 코드에서는 필요하지 않습니다.`fig, ax = pyplot.subplots (figsize = (12,6)); sns.jointplot (memoryPrice [ 'price'], memoryPrice [ 'Memory'])`
TMWP

3
jointplot이 그림 수준 방법이므로 @TMWP의 경우이 답변이 작동하지 않습니다. 아래 답변을 참조하십시오.
elz

5
이 답변은 ax를 입력으로 받아들이지 않는 플롯 유형에는 적용되지 않습니다. 예를 들어sns.lmplot()
Chris

2
시본의 플롯 크기는 사용하여 설정해야 height하고 aspect여기에 설명 된대로 매개 변수를 stackoverflow.com/a/51602446/2412831
LeandroOrdonez

@LeandroOrdonez는 축 수준 함수에는 실제로 적용되지 않습니다.
Paul H

234

seaborn 방법 에서 rc키 를 사용하여 사전을 매개 변수 에 전달하여 그림 크기를 설정할 수도 있습니다 .'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

7
sns.set ()을 호출하면 기본적으로 그림 스타일이 matplotlib 기본값 대신 sns 기본값으로 설정됩니다. 예를 들어 그림에 갑자기 흰색 격자가있는 회색 배경이 표시됩니다. 여기를 참조하십시오 : seaborn.pydata.org/ tutorial / aesthetics.html . 또한 이것은 내 음모의 크기 (sns.pairplot)에 영향을 미치지 않았습니다.
Melissa

sns.boxplot으로 광산도
고든

@Melissa에게 감사합니다. 이것은 내가 .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
이 답변은 ax를 입력으로 받아들이지 않는 플롯 유형에는 적용되지 않습니다. 예를 들어sns.lmplot()
Chris

Chris의 답변을 확장하기 위해 일부 seaborn 플롯은 여러 축이있는 복합 그림을 생성하므로 단일 축을 인수로 사용할 수 없습니다.
Marmaduke

73

당신이 시본에서 "그림 수준"방법에 전달하려는 경우 (예를 들어 있습니다 lmplot, catplot/ factorplot, jointplot) 당신과 사용 인수 내에서이를 지정해야 할 수 있습니다 heightaspect.

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

그림 레벨 방법이 축 사양을 준수하지 않는다는 사실에 대한 자세한 내용 은 https://github.com/mwaskom/seaborn/issues/488matplotlib 객체 지향 인터페이스사용하여 seaborn으로 플로팅을 참조 하십시오 .


11
이것은 도끼를 인수로 받아들이지 않는 sns 플롯을 올바르게 처리하는 유일한 대답입니다.
Melissa

높이와 종횡비는 단일 "면"즉 서브 플롯의 치수를 제어합니다. 따라서 이것은 전체 그림 크기를 직접 조정하지 않습니다.
bernie

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으로 플롯 한 직후 (따라서 도끼를 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

여기도 마찬가지입니다. 같아 sns.FacetGrid계산 (설정 값에 따른도 크기를 설정할 것이다 heightaspect) 및 플로팅 시본이 작동 직후 도형의 크기를 변경. 그리고 그림 크기를 변경 한 후 줄거리의 다른 미세 조정이 발생할 수 있습니다.
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_figwidthset_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():)에는 sizeand aspect매개 변수를 사용하십시오 .

Size 가로 세로 비율을 유지하면서 높이와 너비를 모두 변경합니다.

Aspect 높이를 일정하게 유지하면서 너비 만 변경합니다.

이 두 매개 변수를 사용하여 언제든지 원하는 크기를 얻을 수 있습니다.

크레딧 : https://stackoverflow.com/a/28765059/3901029

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.