범주형 변수의 그룹(요인)을 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")
> library(ggplot2)
> 

> # Boxplot of Petal.Length > f1 <- ggplot(iris_melt_petal.length, aes(x=Species, y=value)) + + geom_boxplot() + + ggtitle(("Boxplot of Petal.Length")) > f1

 

 

 

 

 

 

 

이것을 분석가가 필요에 따라서 순서를 "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

 

 

 

 

 

첫번째에 디폴트로 그린 박스그림과 두번째에 범주형 축 그룹 순서를 바꾼 그래프의 차이를 아시겠지요?  많은 도움 되었기를 바랍니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^

 

728x90
반응형
Posted by Rfriend
,