seaborn.histplot
은 데이터의 분포를 시각화하는 데 사용되는 함수.
일반 막대그래프와는 달리 가로가 계급, 즉 값에 해당한다는 결정적인 차이점이 있음.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
penguins = sns.load_dataset('penguins')
penguins
본 문서에서는 데이터 샘플로 penguins
를 사용하였음.
penguins
의 데이터 info
는 다음과 같음.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 344 entries, 0 to 343
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 species 344 non-null object
1 island 344 non-null object
2 bill_length_mm 342 non-null float64
3 bill_depth_mm 342 non-null float64
4 flipper_length_mm 342 non-null float64
5 body_mass_g 342 non-null float64
6 sex 333 non-null object
dtypes: float64(4), object(3)
memory usage: 18.9+ KB
species
에는 펭귄의 종, island
에는 발견 섬이 문자열로, 2 ~ 5열까지에는 실수로 펭귄의 수치가, 6열에는 펭귄의 성별이 기록되어 있음
이에 x
축을 body_mass_g"(체질량)
, y
축을 개체 수로 한 기본 형태의 히스토그램은
sns.histplot(data=penguins, x='body_mass_g')
plt.show()
으로 출력할 수 있고,
의 형태로 나타난다.
만약 코드를
sns.histplot(data=penguins, y='body_mass_g')
plt.show()
와 같이 y축 표기로 변경한다면,
와 같이 축 반전 형태의 그래프가 출력된다.
이제 파라미터들을 변경해 보자. seaborn
에 따르면, sns.histplot
의 기본 형태는 다음과 같다.
seaborn.histplot(data=None, *, x=None, y=None, hue=None, weights=None, stat='count', bins='auto', binwidth=None, binrange=None, discrete=None, cumulative=False, common_bins=True, common_norm=True, multiple='layer', element='bars', fill=True, shrink=1, kde=False, kde_kws=None, line_kws=None, thresh=0, pthresh=None, pmax=None, cbar=False, cbar_ax=None, cbar_kws=None, palette=None, hue_order=None, hue_norm=None, color=None, log_scale=None, legend=True, ax=None, **kwargs)
입력 조건
pandas.DataFrame
,numpy.ndarray
, mapping, or sequence
시각화할 데이터
입력 조건
vectors or keys indata
데이터에서 x축, y축으로 사용될 열의 이름이나 값
입력 조건
vector or key indata
색상을 지정할 열의 이름이나 값
입력 조건
vector or key indata
각 구간의 카운트에 대하여 가중치 부여
입력 조건
str
히스토그램 플롯에서 통계를 계산하는 방법을 지정함. 입력 없을 시 기본 형태는 count
count
: 각 구간의 관측치 수 표시 (기본 형태)frequency
: 관측치 수를 구간 너비로 나눈 값 표시probability
or proportion
: 막대 높이가 1이 되도록 정규화percent
: 막대 높이가 100이 되도록 정규화density
: 히스토그램의 총 면적이 1이 되도록 정규화입력 조건
str
,number
,vector
, or a pair of such values
히스토그램 막대의 개수를 지정. 입력 없을 시 기본 형태는 auto
.
numpy.histogram_bin_edges
에 따라 자동 계산됨
sns.histplot(data=penguins, x='body_mass_g', bins=30)
plt.show()
bins=30
으로 지정해 주면 구간의 수가 30개로 위와 같이 자동으로 분리됨
입력 조건
number or pair of numbers
히스토그램 막대의 너비를 지정. 입력 없을 시 기본 형태는 None
.
sns.histplot(data=penguins, x='body_mass_g', binwidth=500)
plt.show()
binwidth=500
으로 지정해 주면 구간의 너비가 500으로 위와 같이 자동으로 분리됨
입력 조건
pair of numbers or a pair of pairs
히스토그램을 계산할 범위를 지정. 입력 없을 시 제공 데이터의 양 극단값으로 설정
sns.histplot(data=penguins, x='body_mass_g', binrange=(3000, 4500))
plt.show()
binrange=(3000, 4500)
으로 지정해 주면 체질량 3000 ~ 4500 사이의 데이터만 분리함
bins
나 binwidth
와 같이 사용하여 구간을 더 세부적으로 설정할 수 있음
입력 조건
bool
연속적인 데이터 분포를 막대그래프로 보여주고 있다면, 'discrete' 파라미터를 사용해서 이산분포를 그려줄 수 있음
입력 조건
bool
값이 True이면 구간이 증가함에 따라 누적값을 출력. 입력 없을 시 기본 형태는 False
sns.histplot(data=penguins, x='body_mass_g', cumulative = True)
plt.show()
입력 조건
{“layer”, “dodge”, “stack”, “fill”}
각 열의 분포를 개별적으로 표시. 입력 없을 시 기본 형태는 layer
sns.histplot(data=penguins, x='body_mass_g', hue="species", multiple="layer")
plt.show()
sns.histplot(data=penguins, x='body_mass_g', hue="species", multiple="dodge")
plt.show()
sns.histplot(data=penguins, x='body_mass_g', hue="species", multiple="stack")
plt.show()
sns.histplot(data=penguins, x='body_mass_g', hue="species", multiple="fill")
plt.show()
입력 조건
{“bars”, “step”, “poly”}
그림의 유형 지정. bars
는 막대 그래프, step
은 계단식 그래프, poly
는 다각형 그래프를 의미
입력 없을 시 기본 형태는 bars
sns.histplot(data=penguins, x='body_mass_g', element = 'bars')
plt.show()
sns.histplot(data=penguins, x='body_mass_g', element = 'step')
plt.show()
sns.histplot(data=penguins, x='body_mass_g', element = 'poly')
plt.show()
입력 조건
bool
밀도 그래프의 아래 영역을 채우기 위해 사용. 입력 없을 시 기본 형태는 True
sns.histplot(data=penguins, x='body_mass_g', fill = False)
plt.show()
만약 False
로 지정해 주면 위와 같이 속이 빈 막대 형태로 출력됨
입력 조건
bool
밀도 추정 그래프를 추가. 일변량 데이터와만 관련됨. 입력 없을 시 기본 형태는 False
sns.histplot(data=penguins, x='body_mass_g', kde = True)
plt.show()
입력 조건
dict
seaborn.kdeplot
에 따라 kde 연산 제어.
입력 조건
dict
matplotlib.axes.Axes.plot
에 따라 kde 시각화 제어
입력 조건
matplotlib color
'matplotlib.colors'에 따라 플롯 색상을 지정.
sns.histplot(data=penguins, x='body_mass_g', color = 'red')
plt.show()
입력 조건
bool
False
인 경우 범례를 표시하지 않음. 입력 없을 시 기본 형태는 True
sns.histplot(data=penguins, x='body_mass_g', hue="species", multiple="fill", legend = False)
plt.show()
위 multiple
예시 그래프 중 범례가 표시되는 그래프에서 legend=False
로 지정해 주면 범례가 표시되지 않는 모습을 확인할 수 있음