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.figsize의 rcParams설정을 아래와 같이 그림의 크기 :

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) 당신과 사용 인수 내에서이를 지정해야 할 수 있습니다 height와 aspect.

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/488 및 matplotlib 객체 지향 인터페이스 를 사용하여 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계산 (설정 값에 따른도 크기를 설정할 것이다 height및 aspect) 및 플로팅 시본이 작동 직후 도형의 크기를 변경. 그리고 그림 크기를 변경 한 후 줄거리의 다른 미세 조정이 발생할 수 있습니다.
— 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():)에는 sizeand aspect매개 변수를 사용하십시오 .

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

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

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

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

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