geom_point shape 설정하기

변화가 크지 않은 데이터인 경우, ggplot2 에서 선그래프를 그리고나면 약간 밋밋해보인다. 이럴때 각 좌표마다 포인트(점모양)을 넣어주면 조금은 구분이 명확한 그래프를 그릴 수 있다. ggplot2 에서는 geom_point 함수로 점모양을 그릴 수 있는데, 동그라미 모양뿐 아니라 총 26가지의 모양을 적용할 수 있다. 그래서 아래와 같이 그룹별로 라인을 나누어 그릴때, 포인트도 각기 다르게 셋팅해서 시각화를 할 수 있다.

데이터 만들기

대한민국 법원 등기정보광장에서 받아온 경매/공매 데이터를 사용해본다. 자세한 내용은 별도로 포스팅 예정이며, 데이터는 아래 레이아웃으로 되어 있다.

# A tibble: 3 × 13
  crmm     `2021-11` `2021-12` `2022-01` `2022-02` `2022-03` `2022-04` `2022-05` `2022-06` `2022-07` `2022-08`
  <chr>        <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>     <dbl>
1 m1_work1      2349      2238      2056      1754      2361      2320      2186      2160      2335      2340
2 m2_work1      3032      3067      2619      2431      2641      3089      2904      2674      2943      2851
3 m3_work1       369       427       530       499      1131      1121      1270      1068      1351      1007
# … with 2 more variables: 2022-09 <dbl>, 2022-10 <dbl>

데이터를 보아하니 피벗형태의 데이터라서, 아래와 같이 변경이 필요하다. 잘이해가 가지 않는다면, pivot_longer 관련 포스팅을 참고.

tb2 = tb1 %>% 
  inner_join(sb1, by = c("crmm" = "cd")) %>% 
  pivot_longer(cols = "2021-11":"2022-10") %>% 
  mutate(date = ymd(paste0(name, "-01")))

# A tibble: 36 × 6
   crmm     cdnm       ord name    value date      
   <chr>    <chr>    <dbl> <chr>   <dbl> <date>    
 1 m1_work1 임의경매     2 2021-11  2349 2021-11-01
 2 m1_work1 임의경매     2 2021-12  2238 2021-12-01
 3 m1_work1 임의경매     2 2022-01  2056 2022-01-01
 4 m1_work1 임의경매     2 2022-02  1754 2022-02-01
 5 m1_work1 임의경매     2 2022-03  2361 2022-03-01
 6 m1_work1 임의경매     2 2022-04  2320 2022-04-01
 7 m1_work1 임의경매     2 2022-05  2186 2022-05-01
 8 m1_work1 임의경매     2 2022-06  2160 2022-06-01
 9 m1_work1 임의경매     2 2022-07  2335 2022-07-01
10 m1_work1 임의경매     2 2022-08  2340 2022-08-01
# … with 26 more rows

그래프 그리기

데이터를 가지고 선그래프를 간단히 그려준다.

ggplot(tb2, aes(date, value, colour = cdnm)) +
  geom_line(size = 1)

그 선그래프 위에 점(point) 모양을 그려준다. size는 본인이 조정하면서 알맞은 크기로 조절하면 된다.

ggplot(tb2, aes(date, value, colour = cdnm)) +
  geom_line(size = 1) +
  geom_point(size = 3)

단순히 동그란 점모양 이지만, 그 모양을 변경할 수 있다. shape 값을 셋팅하면 되는데, 사실상 0~25 사이의 숫자인 필드를 이용하면 바로 그 패턴을 이용할 수 있지만, 그렇게 데이터를 셋팅하기 쉽지 않다면 그냥 문자열같은 필드로도 정의해도 된다. 이런 경우, 0~2 번 패턴이 자동적용된다. (네모, 동그라미, 세모)

ggplot(tb2, aes(date, value, colour = cdnm)) +
  geom_line(size = 1) +
  geom_point(aes(shape = cdnm), size = 3)

참고로, 패턴은 아래에 보듯이 0~25 까지 총 26가지 종류를 사용할 수 있다. 아래 보면 빨간색이 보이는 패턴들은 안에다가 프로그래밍으로 색을 사용자지정할 수 있는 패턴이다. fill 속성을 사용하면 된다.

그러면 저 많은 패턴중에 쓰고 싶은 패턴을 선택해서 사용하려면, scale_shape_manual 함수로 번호를 개수만큼 지정하면 된다. 나는 8~10번 패턴을 지정했다.

ggplot(tb2, aes(date, value, colour = cdnm)) +
  geom_line(size = 1) +
  geom_point(aes(shape = cdnm), size = 3) +
  scale_shape_manual(values = c(8,9,10))

마지막으로 stroke 파라메터를 이용하여 point 모양을 굵거나 얇게 셋팅할 수 있다.

ggplot(tb2, aes(date, value, colour = cdnm)) +
  geom_line(size = 0.5) +
  geom_point(aes(shape = cdnm), size = 3, stroke = 1) +
  scale_shape_manual(values = c(8,9,10))


더 보면 좋을 글들