이번 포스팅부터는 두 개의 연속형 변수에 대한 관계를 파악하는데 유용하게 사용할 수 있는 산점도(Scatter Plot) 를 4번에 나누어서 소개를 하겠습니다.
(1) 산점도 (Scatter Plot)
(2) 그룹별 산점도 (Scatter Plot by Groups)
(3) 산점도의 marker 크기 및 색깔, 모양 설정 (Setting Marker's size, color, shape)
(4) 산점도 행렬 (Scatter Plot Matrix)
기본적인 산점도를 matplotlib, seaborn, pandas 패키지를 사용하여 순서대로 그려보겠습니다.
사용할 데이터는 iris 데이터셋의 'petal length'와 'petal width'의 두 개 연속형 변수입니다.
# importing libraries import numpy as np import pandas as pd
import matplotlib.pyplot as plt import seaborn as sns plt.rcParams['figure.figsize'] = [12, 8] # setting figure size
|
# loading 'iris' dataset from seaborn iris = sns.load_dataset('iris') iris.shape (150, 5)
iris.head()
|
(1) matplotlib을 사용한 산점도 (scatter plot by matplotlib) |
# Basic Scatter Plot plt.plot('petal_length', # x 'petal_width', # y data=iris, linestyle='none', marker='o', markersize=10, color='blue', alpha=0.5) plt.title('Scatter Plot of iris by matplotlib', fontsize=20) plt.xlabel('Petal Length', fontsize=14) plt.ylabel('Petal Width', fontsize=14) plt.show() |
산점도에 X, Y 좌표를 사용하여 직사각형(rectangle), 원(circle), 직선(line)을 추가하여 보겠습니다. 먼저 matplotlib.patches 를 importing 해주어야 하고, 산점도를 그린 다음에, add_patch() 함수를 사용하여 직사각형, 원, 직선을 추가합니다.
# adding a rectangle, a circle import matplotlib.patches as patches import matplotlib.pyplot as plt
fig1 = plt.figure() ax1 = fig1.add_subplot(111)
# (0) scatter plot ax1.plot('petal_length', 'petal_width', data=iris, linestyle='none', marker='o')
# (1) adding a rectangle ax1.add_patch( patches.Rectangle( (3, 1), # (x, y) 2, # width 1, # height alpha=0.2, facecolor="blue", edgecolor="black", linewidth=2, linestyle="solid", angle=-10))
# (2) adding a circle ax1.add_patch( patches.Circle( (1.5, 0.25), # (x, y) 0.5, # radius alpha=0.2, facecolor="red", edgecolor="black", linewidth=2, linestyle='solid'))
# (3) adding a line plt.plot([4, 6], [2.2, 1.1], color="green", lw=4, linestyle='solid')
plt.title("Adding a Rectangle, a Circle and a Line", fontsize=20) plt.xlabel('Petal Length', fontsize=14) plt.ylabel('Petal Width', fontsize=14) plt.show()
|
(2) seaborn을 사용한 산점도 (scatter plot by seaborn) |
seaborn 패키지의 (a) regplot() 함수와 (b) scatterplot() 함수를 사용해서 산점도를 그릴 수 있습니다. 순서대로 소개합니다.
(a) regplot() 함수를 사용한 산점도
선형회귀 적합 선을 포함시키지 않으려면 fit_reg=False 를 설정해주면 됩니다.
# Basic Scatter Plot by seaborn sns.regplot(x=iris['petal_length'], y=iris['petal_width'], fit_reg=False) # no regression line plt.title('Scatter Plot of iris by regplot()', fontsize=20) plt.xlabel('Petal Length', fontsize=14) plt.ylabel('Petal Width', fontsize=14) plt.show()
|
두 연속형 변수 간의 선형회귀 적합선을 산점도에 포함시키려면 fit_reg=True 를 설정해주면 됩니다. (defalt 이므로 별도로 표기를 해주지 않아도 회귀적합선이 추가됩니다)
# Scatter Plot with regression line by seaborn regplot() sns.regplot(x=iris['petal_length'], y=iris['petal_width'], fit_reg=True) # default plt.title('Scatter Plot with Regression Line by regplot()', fontsize=20) plt.show() |
X축과 Y축의 특정 값의 조건을 기준으로 산점도 marker의 색깔을 다르게 해보겠습니다. 가령, 'petal length' > 2.5 & 'petal width' > 0.8 이면 '빨간색', 그 이외는 '파란색'으로 설정을 해보겠습니다. 조건에 맞게 'color'라는 새로운 변수를 생성한 후에, scatter_kws={'facecolors': iris_df['color']}) 로 조건별 색을 설정하는 방법을 사용하였습니다.
# Control color of each marker based on X and Y values iris_df = iris.copy()
# Adding a 'color' column based on x and y values cutoff = (iris_df['petal_length']>2.5) & (iris_df['petal_width'] > 0.8) iris_df['color'] = np.where(cutoff==True, "red", "blue")
# Scatter Plot with different colors based on X and Y values sns.regplot(x=iris['petal_length'], y=iris['petal_width'], fit_reg=False, scatter_kws={'facecolors': iris_df['color']}) # marker color plt.title('Scatter Plot with different colors by X & Y values', fontsize=20) plt.show()
|
(b) scatterplot() 함수를 사용한 산점도
# scatter plot by seaborn scatterplot() ax = sns.scatterplot(x='petal_length', y='petal_width', alpha=0.5, data=iris) plt.title('Scatter Plot by seaborn', fontsize=20) plt.show()
|
(3) pandas를 사용한 산점도 (scatter plot by pandas) |
iris.plot.scatter(x='petal_length', y='petal_width', s=50, # marker size c='blue', alpha=0.5) plt.title('Scatter Plot of iris by pandas', fontsize=20) plt.xlabel('Petal Length', fontsize=14) plt.ylabel('Petal Width', fontsize=14) plt.show()
|
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~
'를 꾹 눌러주세요. ^^
다음번 포스팅에서는 그룹별 산점도 (Scatter Plot by Groups) 의 마커 모양, 색깔을 다르게 그리는 방법을 소개하겠습니다.
'Python 분석과 프로그래밍 > Python 그래프_시각화' 카테고리의 다른 글
[Python] 4개 변수로 점의 크기와 색깔을 다르게 산점도 그리기 (Scatter plot with 4 variables, different size & color) (3/4) (2) | 2019.01.13 |
---|---|
[Python] 그룹별 산점도 점 색깔과 모양 다르게 하기 (Scatter Plot by Groups) (2/4) (3) | 2019.01.13 |
[Python] 원 그래프 (Pie Chart), 하위 그룹을 포함한 도넛 그래프 (Donut Chart with Subgroups) (1) | 2019.01.12 |
[Python] 막대 그래프 (Bar Chart) (7) | 2019.01.11 |
[Python] 상자 그림 (Box plot, Box-and-Whisker Plot) (2) | 2019.01.08 |