R ggplot2 범주형 축 그룹(요인) 순서 바꾸기 : scale_x_discrete(limits=...)
R 분석과 프로그래밍/R 그래프_시각화 2015. 9. 6. 20:05범주형 변수의 그룹(요인)을 x 축으로 한 그래프를 그리면 디폴트는 알파벳 순서대로 그룹이 제시가 됩니다. 만약 순서형 요인(ordered factor)으로 범주형 변수를 만들었다면 그 순서에 따라서 그래프가 그려질 겁니다.
그런데 분석가가 범주형 변수의 그룹의 순서를 ggplot2가 디폴트로 그려준 것과는 달리 바꾸고 싶어할 수 있습니다.
이때 scale_x_discrete(limits=c(...) 함수를 사용해서 그룹의 순서를 바꿀 수 있습니다.
아래의 예제에 사용할 데이터는 iris 데이터프레임의 Petal.Length 와 Species 두 개의 변수입니다. Species 가 요인(Factor)형 변수이며, "setosa", "versicolor", "virginica" 의 3개 Levels 로 구성이 되어있습니다.
> str(iris) 'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
|
ggplot2 패키지를 사용해서 Species를 x축으로 Petal.Length 를 y축으로 해서 Box plot을 그려보겠습니다. 이를 위해서 먼저 데이터셋을 ggplot2에서 사용할 수 있는 형태로 변환이 필요합니다. 가로로 옆으로 늘어서있는 원래의 iris 데이터셋을 reshape 패키지를 사용해서 melt() 함수를 적용하여 세로로 길게 세워보겠습니다. (☞ reshape 패키지 melt(), cast() 함수 사용법 둘러보기)
> # dataset preparation > library(reshape) > iris_melt_petal.length <- melt(data=iris, + id.vars = c("Species"), + measure.vars = c("Petal.Length")) > > iris_melt_petal.length Species variable value 1 setosa Petal.Length 1.4 2 setosa Petal.Length 1.4 3 setosa Petal.Length 1.3 4 setosa Petal.Length 1.5 5 setosa Petal.Length 1.4 6 setosa Petal.Length 1.7 7 setosa Petal.Length 1.4 8 setosa Petal.Length 1.5 9 setosa Petal.Length 1.4 10 setosa Petal.Length 1.5 11 setosa Petal.Length 1.5 12 setosa Petal.Length 1.6 13 setosa Petal.Length 1.4 14 setosa Petal.Length 1.1 15 setosa Petal.Length 1.2 16 setosa Petal.Length 1.5 17 setosa Petal.Length 1.3 18 setosa Petal.Length 1.4 19 setosa Petal.Length 1.7 20 setosa Petal.Length 1.5 21 setosa Petal.Length 1.7 22 setosa Petal.Length 1.5 23 setosa Petal.Length 1.0 24 setosa Petal.Length 1.7 25 setosa Petal.Length 1.9 26 setosa Petal.Length 1.6 27 setosa Petal.Length 1.6 28 setosa Petal.Length 1.5 29 setosa Petal.Length 1.4 30 setosa Petal.Length 1.6 31 setosa Petal.Length 1.6 32 setosa Petal.Length 1.5 33 setosa Petal.Length 1.5 34 setosa Petal.Length 1.4 35 setosa Petal.Length 1.5 36 setosa Petal.Length 1.2 37 setosa Petal.Length 1.3 38 setosa Petal.Length 1.4 39 setosa Petal.Length 1.3 40 setosa Petal.Length 1.5 41 setosa Petal.Length 1.3 42 setosa Petal.Length 1.3 43 setosa Petal.Length 1.3 44 setosa Petal.Length 1.6 45 setosa Petal.Length 1.9 46 setosa Petal.Length 1.4 47 setosa Petal.Length 1.6 48 setosa Petal.Length 1.4 49 setosa Petal.Length 1.5 50 setosa Petal.Length 1.4 51 versicolor Petal.Length 4.7 52 versicolor Petal.Length 4.5 53 versicolor Petal.Length 4.9 54 versicolor Petal.Length 4.0 55 versicolor Petal.Length 4.6 56 versicolor Petal.Length 4.5 57 versicolor Petal.Length 4.7 58 versicolor Petal.Length 3.3 59 versicolor Petal.Length 4.6 60 versicolor Petal.Length 3.9 61 versicolor Petal.Length 3.5 62 versicolor Petal.Length 4.2 63 versicolor Petal.Length 4.0 64 versicolor Petal.Length 4.7 65 versicolor Petal.Length 3.6 66 versicolor Petal.Length 4.4 67 versicolor Petal.Length 4.5 68 versicolor Petal.Length 4.1 69 versicolor Petal.Length 4.5 70 versicolor Petal.Length 3.9 71 versicolor Petal.Length 4.8 72 versicolor Petal.Length 4.0 73 versicolor Petal.Length 4.9 74 versicolor Petal.Length 4.7 75 versicolor Petal.Length 4.3 76 versicolor Petal.Length 4.4 77 versicolor Petal.Length 4.8 78 versicolor Petal.Length 5.0 79 versicolor Petal.Length 4.5 80 versicolor Petal.Length 3.5 81 versicolor Petal.Length 3.8 82 versicolor Petal.Length 3.7 83 versicolor Petal.Length 3.9 84 versicolor Petal.Length 5.1 85 versicolor Petal.Length 4.5 86 versicolor Petal.Length 4.5 87 versicolor Petal.Length 4.7 88 versicolor Petal.Length 4.4 89 versicolor Petal.Length 4.1 90 versicolor Petal.Length 4.0 91 versicolor Petal.Length 4.4 92 versicolor Petal.Length 4.6 93 versicolor Petal.Length 4.0 94 versicolor Petal.Length 3.3 95 versicolor Petal.Length 4.2 96 versicolor Petal.Length 4.2 97 versicolor Petal.Length 4.2 98 versicolor Petal.Length 4.3 99 versicolor Petal.Length 3.0 100 versicolor Petal.Length 4.1 101 virginica Petal.Length 6.0 102 virginica Petal.Length 5.1 103 virginica Petal.Length 5.9 104 virginica Petal.Length 5.6 105 virginica Petal.Length 5.8 106 virginica Petal.Length 6.6 107 virginica Petal.Length 4.5 108 virginica Petal.Length 6.3 109 virginica Petal.Length 5.8 110 virginica Petal.Length 6.1 111 virginica Petal.Length 5.1 112 virginica Petal.Length 5.3 113 virginica Petal.Length 5.5 114 virginica Petal.Length 5.0 115 virginica Petal.Length 5.1 116 virginica Petal.Length 5.3 117 virginica Petal.Length 5.5 118 virginica Petal.Length 6.7 119 virginica Petal.Length 6.9 120 virginica Petal.Length 5.0 121 virginica Petal.Length 5.7 122 virginica Petal.Length 4.9 123 virginica Petal.Length 6.7 124 virginica Petal.Length 4.9 125 virginica Petal.Length 5.7 126 virginica Petal.Length 6.0 127 virginica Petal.Length 4.8 128 virginica Petal.Length 4.9 129 virginica Petal.Length 5.6 130 virginica Petal.Length 5.8 131 virginica Petal.Length 6.1 132 virginica Petal.Length 6.4 133 virginica Petal.Length 5.6 134 virginica Petal.Length 5.1 135 virginica Petal.Length 5.6 136 virginica Petal.Length 6.1 137 virginica Petal.Length 5.6 138 virginica Petal.Length 5.5 139 virginica Petal.Length 4.8 140 virginica Petal.Length 5.4 141 virginica Petal.Length 5.6 142 virginica Petal.Length 5.1 143 virginica Petal.Length 5.1 144 virginica Petal.Length 5.9 145 virginica Petal.Length 5.7 146 virginica Petal.Length 5.2 147 virginica Petal.Length 5.0 148 virginica Petal.Length 5.2 149 virginica Petal.Length 5.4 150 virginica Petal.Length 5.1
|
데이터셋 준비가 되었으므로, 디폴트 설정으로 해서 x축에 Species, y축에 Petal.Length로 Box plot 을 그려보겠습니다. ggplot2는 별도의 설치 및 호출이 필요하므로 install.packages("ggplot2")와 library(ggplot2)를 먼저 실행 후 그래프를 그립니다. x축의 요인(factor)의 순서가 위에서 살펴본것처럼 "setosa", "versicolor", "virginica" 의 알파벳 순서로 되어있습니다.
> install.packages("ggplot2")
|
이것을 분석가가 필요에 따라서 순서를 "virginica", "versicolor", "setosa" 처럼 바꾸고 싶다고 해봅시다. 이때 사용하는 것이 scale_x_discrete(limit=...) 함수입니다.
> f2 <- f1 + + scale_x_discrete(limits=c("virginica", "versicolor", "setosa")) + + ggtitle("Changed Order of x axis by scale_x_discrete(limit=...)") > > f2
|
첫번째에 디폴트로 그린 박스그림과 두번째에 범주형 축 그룹 순서를 바꾼 그래프의 차이를 아시겠지요? 많은 도움 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^
'R 분석과 프로그래밍 > R 그래프_시각화' 카테고리의 다른 글
R ggplot2 연속확률분포 곡선, stat_function() (0) | 2015.09.07 |
---|---|
R ggplot2 히트맵(Heat map) 그리기 : geom_tile(), geom_raster() (12) | 2015.09.06 |
R ggplot2 분할 면에 각각 주석 넣기 : geom_text() (0) | 2015.09.06 |
R ggplot2 텍스트(text), 선(line), 화살표(arrow), 음영사각형(shadowed box), 제목(title) 주석달기 : annotate() (0) | 2015.09.05 |
R ggplot2 그래프 색깔 설정 (colour setting) (0) | 2015.09.05 |