본문 바로가기
컴퓨터/Python

파이썬으로 히스토그램 그리기

by 날아라키위새 2021. 6. 28.
반응형

보통 그래프는 R에서 많이 그렸었는데

파이썬을 좀 더 다루게 되면서 파이썬으로 작업하고 있다.

파이썬으로 히스토그램 그리는 것은 정말 쉽다.

seaborn 패키지에 있는 histplot()를 이용하면 1줄이면 그릴 수 있다.

그래도 이것저것 꾸미다 보면 몇 줄 늘어난다.

 

파이썬으로 히스토그램 그리는 방법

항상 애용하는 iris 데이터를 가지고 예로 들어보겠다.

import seaborn as sns


df_iris = sns.load_dataset('iris')
print(df_iris)

     sepal_length  sepal_width  petal_length  petal_width    species
0             5.1          3.5           1.4          0.2     setosa
1             4.9          3.0           1.4          0.2     setosa
2             4.7          3.2           1.3          0.2     setosa
3             4.6          3.1           1.5          0.2     setosa
4             5.0          3.6           1.4          0.2     setosa
..            ...          ...           ...          ...        ...
145           6.7          3.0           5.2          2.3  virginica
146           6.3          2.5           5.0          1.9  virginica
147           6.5          3.0           5.2          2.0  virginica
148           6.2          3.4           5.4          2.3  virginica
149           5.9          3.0           5.1          1.8  virginica

 

이런 데이터셋이 있을 때 히스토그램을 그려보자

아래의 코드를 실행하면

import seaborn as sns
import matplotlib.pyplot as plt

df_iris = sns.load_dataset('iris')

plt.figure(figsize=(10, 8))
plt.rcParams.update({'font.size': 22})
sns.histplot(data=df_iris, x='sepal_length', binwidth=0.5, binrange=(0,10))
plt.xlim(0, 10)

 

이런 히스토그램이 나온다. 

다른 설정 추가하면 그래프를 조금 더 예쁘게 만들 수 있다. Bar 색깔이라던지 axis label이라던지.

파이썬으로 히스토그램 그리기

그런데 히스토그램을 그리다보면 

그룹별로 나눠서 히스토그램을 여러 개 그리고 싶을 때가 있다. 혹은 2x2 같은 그리드로.

이럴 땐 여러 방법이 있지만 2가지만 소개해보자면

 

히스토그램 여러 개 한 번에 그리기 - FacetGrid 이용

딱 2줄로 그룹별로 나눠서 히스토그램을 그릴 수 있다.

아래의 코드를 실행하면

import seaborn as sns

df_iris = sns.load_dataset('iris')

figure = sns.FacetGrid(df_iris, col="species")
figure.map(sns.histplot, "sepal_length")

species에 3개의 unique value가 있기 때문에 3개의 히스토그램이 그려진다.

col이나 row를 만지면 2x2같은 그리드도 그릴 수 있고

역시 설정을 추가하면 좀 더 예쁘게 그릴 수 있다.

파이썬으로 히스토그램 여러개 그리기

 

히스토그램 여러개 한 번에 그리기 - subplot 이용

위의 코드가 seaborn 패키지를 이용했다면 아래의 코드는 matplotlib의 subplot을 이용하는 방법이다. (subplots와 구분하자.)

import seaborn as sns
import matplotlib.pyplot as plt

df_iris = sns.load_dataset('iris')


plt.subplot(1, 3, 1)
sns.histplot(data=df_iris[df_iris["species"] == 'setosa'], x='sepal_length', binwidth=0.5, binrange=(0,10))
plt.subplot(1, 3, 2)
sns.histplot(data=df_iris[df_iris["species"] == 'versicolor'], x='sepal_length', binwidth=0.5, binrange=(0,10))
plt.subplot(1, 3, 3)
sns.histplot(data=df_iris[df_iris["species"] == 'virginica'], x='sepal_length', binwidth=0.5, binrange=(0,10))

코드를 실행하면 이런 히스토그램이 만들어진다. 

파이썬으로 히스토그램 여러개 그리기

 

히스토그램을 여러 개 그리는 방법은 다양하지만 대표로 두 가지를 소개해보았다.

 

관련 글:

파이썬으로 박스플롯 (box plot - 상자그림) 그리기

 

반응형

댓글