public bigdata

ggplot tip 본문

R programming

ggplot tip

public bigdata 2019. 11. 7. 00:03

1. Tip

1) 그래프를 그렸을 때 어떤 데이터가 생성되었는지 알고 싶으면 ggplot_build를 사용하면 데이터를 살펴볼 수 있다.

2) stat_summary, stat_sum 등등

R에는 20개가 넘는 스탯이 있는데, stat_summary는 x축별 y값의 요약(group 인자가 더해지면 같은 x값 내에서 group에 따라 요약치를 달리 구한다. 아래 코드 및 플랏 처럼)

data("iris")
iris$random <- sample(c(0,1), 150, replace = TRUE)
ggplot(iris)+
  stat_summary(aes(x= Species, y=Sepal.Width, group = random, fill = as.factor(random)),
               fun.y = "mean",
               geom = "bar",
               position = "dodge") 

group 값이 stat_summary에서 Species 별 Sepal.Width 값을 x축 별로만 보지 말고, group도 함께 고려 하라는 말이다.

> ggplot_build(p1)$data
[[1]]
     fill     x group        y ymin     ymax PANEL xmin xmax colour size linetype alpha
1 #00BFC4 1.225     2 3.413043    0 3.413043     1 1.00 1.45     NA  0.5        1    NA
2 #F8766D 0.775     1 3.440741    0 3.440741     1 0.55 1.00     NA  0.5        1    NA
3 #00BFC4 2.225     2 2.739286    0 2.739286     1 2.00 2.45     NA  0.5        1    NA
4 #F8766D 1.775     1 2.809091    0 2.809091     1 1.55 2.00     NA  0.5        1    NA
5 #00BFC4 3.225     2 2.920000    0 2.920000     1 3.00 3.45     NA  0.5        1    NA
6 #F8766D 2.775     1 3.028000    0 3.028000     1 2.55 3.00     NA  0.5        1    NA

 

데이터를 보면 위 설명과 x값이 다른데 그 이유는 의미적으로는 같은 x값 내에서 group을, 구분하여 그려 달라는 의미이지만 내부적으로 plot을 위해서는 수치값으로 변환하기 때문에 저런 x 값이 나타난다. 

추가적으로 stat_sum 같은 함수는 x축 별, y값 별 동일한 case의 빈도를 세어 n이라는 변수로 만들어 준다. 하고 싶었던 말은 stat 함수별로 x축별로 요약할 것인지, x축, y축 모두 고려하여 요약할 것인지 모두 다르다는 것이고, 무슨 값을 요약할 것인지도 목적에 따라 다르다.

2. ..n.., ..count.., ..prop..

var_plot2(name_var = num_variable[[1]]) + stat_count(geom = "text",
                                                     mapping = aes(x = 사망자수,
                                                                   y = ..count..,
                                                                   label=..count..))

위 코드의 stat_count처럼 ..count..와 같은 속성을 활용하려면 stat_* 함수 내부에서 자동 계산되어 생성되는 요약치를 바로 사용해야 한다.(원래의 데이터가 아니기 때문에 해당 코드를 떠나면 전달되지 않는다. stat_count의 괄호'(' 내에서 바로 사용해야 한다는 말이다.

ggplot(car, aes(주야, killtype))+
  geom_count() + 
  geom_text(stat = "sum", aes(label = ..n..),
            hjust = 1.2,
            size = 5)

stat_sum 함수는 아래와 같은 예시의 데이터를 만들어 준다. 해당하는 플랏의 예시도 첨부한다. stat_sum함수는 x, y별 point가 겹쳐서 제대로 보이지 않는 경우에 x, y별 데이터의 갯수를 n이라는 변수에 요약하기 때문에 위의 코드에서 ..n..이라는 값을 사용해 플랏을 그릴 수 있다.

> ggplot_build(p1)$data
[[1]]
       size PANEL  x  y group  n        prop shape colour fill alpha stroke
1  3.773501     1  9 12    -1  5 0.021367521    19  black   NA    NA    0.5
2  2.386750     1 11 14    -1  2 0.008547009    19  black   NA    NA    0.5
3  5.160251     1 11 15    -1 10 0.042735043    19  black   NA    NA    0.5
4  2.961161     1 11 16    -1  3 0.012820513    19  black   NA    NA    0.5
5  3.773501     1 11 17    -1  5 0.021367521    19  black   NA    NA    0.5
6  2.386750     1 12 16    -1  2 0.008547009    19  black   NA    NA    0.5
7  1.000000     1 12 17    -1  1 0.004273504    19  black   NA    NA    0.5

3. reorder 함수를 통해 박스플롯 등을 원하는 기준대로 정렬할 수 있다.

  • reorder(정렬하고자 하는 변수, 정렬을 위한 기준 변수, 기준 변수에 적용할 함수(필요한 경우)

www.r-graph-gallery.com/267-reorder-a-variable-in-ggplot2.html

 

Reorder a variable with ggplot2

This post describes how to reorder a variable in a ggplot2 chart. Several methods are suggested, always providing examples with reproducible code chunks.

www.r-graph-gallery.com

 

뭐 어떻게 동작하는건지 데이터를 어떻게 정리해서 동작하는건지 정리