ggplot2::aesthetic mapping
exploratory data analysis (탐색적 자료 분석).
자료를 탐색하고 시각화하는 방법을 배우는 수업이다.
본 글은 EDA수업의 중간고사 대비를 위해 시작한 글쓰기라고 할 수 있겠다.
아래 사이트에 입장하면 공부를 위해 필요한 예시 자료가 있다.
https://r4ds.had.co.nz/index.html
Welcome | R for Data Science
This book will teach you how to do data science with R: You’ll learn how to get your data into R, get it into the most useful structure, transform it, visualise it and model it. In this book, you will find a practicum of skills for data science. Just as
r4ds.had.co.nz
1. library(ggplot2 ) & mpg dataset review
첫 번째 실습 자료는 Fuel economy data이다. 직역하면 연비데이터 차량의 연비가 포함된 데이터로 예상할 수 있다.
library(ggplot2)
head(mpg)
우선 ggplot2와 이어서 mpg 데이터를 불러오겠다.
만약 ggplot2 패키지가 설치되어 있지 않은 환경이라면 설치하면 된다. (""를 빼먹지 않도록 하자.)
install.packages("ggplot2")
console을 보면 mpg데이터를 볼 수 있다.
- cty, hwy는 각각 도심지, 고속도로에서의 차량 연비를 의미한다.
- dsipl은 리터 단위의 엔진 배기량
- cyl은 실린더의 수(일단 실린더가 뭔지 모르겠음)
- drv는 전륜후륜,4륜을 나타내는 변수이며
- model은 차량의 모델명
- class는 차량의 유형이다. 예를들면 suv, compact 등이 있다고 할 수 있겠다.
대충 보았을 때 cty와 hwy는 conti variable. 연속형 변수일 것으로 예상이 되고, displ은 연속형? 범주형? 배기량의 종류가 그렇게 다양할까? cyl은 categorical variable. 범주형. 왠지 이건 4개 아니면 5개, 6개일 것 같다. drv는 범주형이 확실할 것이고, model은 잘모르겠다. 범주형일 것 같긴한데, 너무 많지 않나? class는 범주형일 것으로 예상된다.
ggplot의 핵심은 data와 aesthetic mapping, layer라고 할 수 있다.
여기서 aesthetic mapping 변수와 시각적 속성을 서로 mapping묶는 것이라고 생각하면 좋을 것 같다.
예를 들면 scatter plot의 점의 크기를 a변수로 둔다거나 bar graph의 색깔을 변수를 기준으로 바뀌게 하는 느낌이라고 상상할 수 있겠다.
먼저 ggplot으로 mpg데이터에서 displ을 x값에, hwy를 y로 aesthetic mapping하여 scatter plot을 그려보자.
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point()
x축을 displ로 y축을 hwy로 하는 scatter plot을 만들었다. 이렇게 aesthetic mapping은 말그대로 변수와 시각적 속성을 한 묶음으로 하는 것이다.
Ex.1
How would you describe the relationship between cty and hwy?
위의 예시를 통해 cty와 hwy 변수의 관계를 설명해보자.
ggplot(mpg, aes(x = cty, y = hwy)) +
geom_point()
displ과 hwy의 관계와 비교했을 때, 양의 상관관계를 가지는 것을 확인할 수 있다.
2. What does ggplot(mpg, aes(model, manufacturer)) + geom_point() show?
ggplot(mpg, aes(model, manufacturer)) +
geom_point()
위 예제는 aesthetic mapping을 할 때 x와 y에 대해서 지정을 할 때 생략이 가능하다는 것을 알려준다. 또한 위의 시각화는 model 변수와 같이 범주가 큰 변수를 대상으로는 썩 좋지 않아 보인다.
3. See if you can predict what the plot will look like before running the code.
ggplot(mpg, aes(x=cty, y=hwy)) + geom_point()
ggplot(diamonds, aes(x=carat, y=price)) + geom_point()
ggplot(economics, aes(x=date, y=unemploy)) + geom_line()
ggplot(mpg, aes(x=cty)) + geom_histogram()
위의 코드를 불러오기 전에 예상을 먼저 해보자.
1. 첫 번째 코드는 x축을 cty로 y축을 hwy로 하는 scatter chart
2. 두 번째 코드는 diamonds라는 dataset의 x축은 carat, y축은 price로 갖는 scatter chart
3. 세 번째 코드는 economics dataset의 x축은 date, y축은 unemploy를 갖는 line graph
4. 네 번째 코드는 mpg dataset의 x축을 cty로 갖는 histogram. (히스토그램은 aesthetic mapping에 변수를 하나만 가질 수 있다고 배웠던 것으로 기억한다)
![]() |
![]() |
![]() |
![]() |
왼쪽 상단부터 시계방향으로 코드에 대한 결과물이다. 마지막 히스토그램은 심심해서 y축에 변수를 넣을 수 있나 시도해봤다.
2. colour, size, shape, other aesthetic attributes
이번에는 aesthetic mapping에 여러가지 옵션에 대해서 공부해보자.
앞서 x와 y에 특정 변수를 aesthetic mapping하는 것을 공부했다. 근데 aesthetic mapping에는 다양한 parameter가 있다. 그 첫 번째는 colour이다..
잘못 쓴 게 아니고 colour가 맞다... 영국에서는 color를 colour라 한다고 하셨던가. 암튼 중요한 것은 아니고 color로 작성해도 잘 작동한다.
ggplot(mpg, aes(displ, hwy, colour = class)) +
geom_point()
aes안에 colour 옵션에 특정 변수를 넣으면 변수별로 색깔이 자동 지정되어 시각적으로 구분을 돕는다.
다음은 shape이다. colour와 별 다를 것 없이 어느정도 예상이 가능하다.
ggplot(mpg, aes(displ, hwy, shape = drv)) +
geom_point()
shape에 drv를 mapping 시켰더니 각 points의 모양이 drv를 기준으로 바뀌었다. 4륜은 동그라미, 전륜은 세모.. 뭐 이런식이다.
가독성이 좋다고는 하고 싶지 않다.
다음은 size 같은 방식으로 코드를 실행해보겠다.
ggplot(mpg, aes(displ, hwy, size=cyl)) +
geom_point()
실린더에 개수와 점의 크기가 비례한 그래프가 그려졌다. 이 그래프는 보면 cyl의 값이 연비와 어느정도 상관관계가 있다고 생각할 수 있을 것 같다.
3. Setting an aesthetic to a fixed value.
이번엔 고정된 값으로 aesthetic을 지정해보자.
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour = "blue")
뭔가 결과값이 이상하다. 분명 blue를 color로 지정하여 aesthetic mapping했는데 결과가 blue가 아니다.
모든 점을 파란색으로 고정되게 하고자 한다면 aesthetic안이 아닌 밖에 color를 지정해주어야 한다.
올바르게 작성된 코드를 확인해보자.
ggplot(mpg, aes(displ, hwy)) +
geom_point(color = "blue")
아주 시퍼런 색으로 잘 물들었다 할 수 있겠다.
Ex. 2
1. Experiment with the colour, shape and size aesthetics. What happens when you map them to continuous values? What about categorical values? What happens when you use more than one aesthetic in a plot?
- 연속형 변수를 color, shape, size로 aesthetic mapping하면 어떻게 되는가?
- 범주형 변수는 또 어떻게 되는가?
- 한 plot에 aesthetic mapping을 여러 개 하면 어떻게 되는가? shape과 size를 동시에 mapping하는 것을 의미하는 것 같다.
연속형 변수를 color에 aes mapping 하는 경우 다음과 같은 결과가 나온다.
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color=cty))
색깔의 진하기를 통해 level을 나타낸다. color 와 범주형을 mapping한 경우는 이전에 공부했고
다음은 shape.
연속형의 경우는 역시 shape으로 나타낼 수 없다. ( 세상에 있는 모양의 종류는 무한하지 못하다.)
size와 연속형 변수 mapping도 앞서 경험했고 범주형 변수와는 어떻게 조합이 되는지 확인해보자.
ggplot(mgp, aes(displ, hwy)) +
geom_point(aes(size=drv))
범주형자료의 값을 사이즈로 구분하여 나타낸다.
2. What happens if you map a continuous variable to shape? Why? What happens if you map trans to shape? Why?
shape을 trans로 하고 aesthetic mapping을 하면 어떻게 되는지 확인해보자.
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(shape=trans)) +
scale_shape_manual(values=seq(0,15))
trans는 범주형 변수이다. 고유값으로 10개의 종류를 갖고 있다.
![]() |
![]() |
왼쪽 plot의 코드는 위에 코드에서 scale_shape_manual을 제외한 결과다. 잘 보면 trans 변수 가지고 있는 고유값에 비해 모양의 종류가 부족한 빈 칸으로 남겨져 있는 것을 확인할 수 있다. 이 때 scale_shape_manual 함수를 사용하면 추가로 모양을 생성해서 제공해준다. values 값으로 지정할 수 있는 최소값은 trans변수의 고유값의 개수이다. 즉 이 경우엔 10개라고 할 수 있겠다.