본문 바로가기
  • "You can't manage what you can't measure" Peter Drucker
데이터 분석 (with Rstudio)

[Rstudio] 산점도 (scatter plot) with ggplot

by Vitaminymc 2023. 10. 17.
반응형

산점도 (scatter plot)

산점도(Scatter Plot)는 두 개의 변수 간의 관계를 점을 통해서 표시하는 그래프이다.

각 데이터 포인트는 두 변수의 값을 나타내며, 이를 x축과 y축에 대응시켜 산포도를 생성한다.

산점도를 통해 두 변수 간의 상관 관계를 확인할 수 있으며, 양의 상관 관계인 경우 데이터 포인트는 오른쪽 상단으로 향하고, 음의 상관 관계인 경우 왼쪽 상단으로 향한다.

데이터 포인트가 어디에 집중되어 있는지와 분포를 파악할 수 있으며, 데이터가 여러 군집으로 구분될 때 산점도를 사용하여 군집을 식별하고 분류할 수 있다. 

 

R 기본함수 : plot 함수 사용

library(palmerpenguins)

data("penguins")  #Dataset 불러오기

str(penguins)  #Dataset 구성 확인
> str(penguins)  #Dataset 구성 확인
tibble [344 × 8] (S3: tbl_df/tbl/data.frame)
 $ species          : Factor w/ 3 levels "Adelie","Chinstrap",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ island           : Factor w/ 3 levels "Biscoe","Dream",..: 3 3 3 3 3 3 3 3 3 3 ...
 $ bill_length_mm   : num [1:344] 39.1 39.5 40.3 NA 36.7 39.3 38.9 39.2 34.1 42 ...
 $ bill_depth_mm    : num [1:344] 18.7 17.4 18 NA 19.3 20.6 17.8 19.6 18.1 20.2 ...
 $ flipper_length_mm: int [1:344] 181 186 195 NA 193 190 181 195 193 190 ...
 $ body_mass_g      : int [1:344] 3750 3800 3250 NA 3450 3650 3625 4675 3475 4250 ...
 $ sex              : Factor w/ 2 levels "female","male": 2 1 1 NA 1 2 1 2 NA NA ...
 $ year             : int [1:344] 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ...

 

plot #1

plot (penguins$bill_length_mm, penguins$bill_depth_mm,
      col = penguins$species,
      xlab = "부리 길이",
      ylab = "부리 높이",
      main = "팔머 펭귄 부리 사이즈 분포")

 

plot #2 : Grooup (species)별 색상 지정

plot(penguins$bill_length_mm, penguins$bill_depth_mm,
     xlab = "부리 길이",
     ylab = "부리 높이",
     main = "팔머 펭귄 부리 사이즈 분포",
     col = ifelse(penguins$species == "Adelie", "blue", 
     ifelse(penguins$species == "Gentoo", "red", "green"))
)

 

plot #3 : Grooup (species)별 색상 및 pch 지정

 

pch (point character)는 plot 함수를 통해 그려지는 그래프의 데이터 포인트(점)의 모양을 지정하는 옵션

# 종별로 색상 및 pch 지정
plot(penguins$bill_length_mm, penguins$bill_depth_mm,
     xlab = "부리 길이",
     ylab = "부리 높이",
     main = "팔머 펭귄 부리 사이즈 분포",
     col = ifelse(penguins$species == "Adelie", "blue", 
     	ifelse(penguins$species == "Gentoo", "red", "green")),
     pch = ifelse(penguins$species == "Adelie", 1, 
     	ifelse(penguins$species == "Gentoo", 2, 19))
)

pch (point character) 옵션

?pch

pch (point character)


300x250

ggplot + geom_point

geom_point #1

ggplot(data = penguins, aes(x=bill_length_mm, y=bill_depth_mm, col=species)) + 
  geom_point() +
  labs(title = "팔머 펭귄 부리 사이즈 분포", x = "부리 길이", y = "부리 높이")

geom_point

 

geom_point #2 : Grooup (species)별 색상 및 pch 지정

ggplot(data = penguins, aes(x = bill_length_mm, y = bill_depth_mm, 
		color = species, shape = species, size = species)) +
  geom_point() +
  labs(title = "팔머 펭귄 부리 사이즈 분포", x = "부리 길이", y = "부리 높이") +
  scale_color_manual(values = c("Adelie" = "blue", "Gentoo" = "red", "Chinstrap" = "green")) +
  scale_shape_manual(values = c("Adelie" = 1, "Gentoo" = 2, "Chinstrap" = 3)) +
  scale_size_manual(values = c("Adelie" = 2, "Gentoo" = 2, "Chinstrap" = 3))

aes 함수를 사용하여 x 축, y 축, 색상, shape, 그리고 크기를 설정
scale_color_manual 함수를 사용하여 종별로 색상을 수동으로 지정
scale_shape_manual 함수를 사용하여 종별로 pch 값을 수동으로 지정
scale_size_manual 함수를 사용하여 종별로 포인트의 크기를 수동으로 지정

 

geom_point #3 : position_ jitter, geom_jitter

 position_jitter 함수를 사용하여 데이터 포인트를 약간 흩뿌리는 효과를 적용

데이터 점들을 최대한 안 겹치게 만들어 시각화 효과 증대

ggplot(data = penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species)) +
  geom_point(position = position_jitter(width = 0.1, height = 0.1), size=3) +
  labs(title = "팔머 펭귄 부리 사이즈 분포", x = "부리 길이", y = "부리 높이")

 

ggplot(data = penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species)) +
  geom_jitter(width = 0.1, height = 0.1) +
  labs(title = "팔머 펭귄 부리 사이즈 분포", x = "부리 길이", y = "부리 높이")

geom_point 대신에 geom_jitter 함수를 사용할 수도 있으며, width와 height 매개변수를 사용하여 포인트의 흩뿌림 정도를 조절

 

728x90