# 1)
ggplot(data = mpg)+
geom_point(mapping = aes(x = displ, y = hwy))
# 2)
ggplot(data = mpg)+
geom_smooth(mapping = aes(x = displ, y = hwy))
플롯은 동일한 x변수, y변수를 포함하고, 동일한 데이터를 나타낸다. 그러나 데이터를 표현하는 시각 객체가 다르다. 이는 다른 지옴의 유형을 사용하기 때문을 알 수 있다.
지옴(geom)
지옴(geom)은 데이터를 나타내기 위해 플롯이 사용하는 기하 객체(geometric object)를 의미한다. 따라서 위의 플롯은 산점도를 나타내는 포인트 지옴(geom_point)을 사용했고, 아래는 평활 지옴(geom_smooth), 즉 데이터에 적합된 평활선을 이용했다.
플롯에서 지옴을 바꾸기 위해서는 ggplot() 에 추가하는 지옴 함수를 변경하면 된다. 평활지옴에서는 선의 linetype을 설정할 수 있다. geom_smooth() 는 linetype으로 매핑된 변수의 고윳값마다 다른 형태의 선을 그린다.
ggplot(data = mpg)+
geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv))
color 옵션
여기서 geom_smooth() 는 자동차의 동력전달장치를 의미하는 drv 값에 기초하여 차 모델들을 세 개의 선으로 분리한다.
원 데이터 위에 선들을 겹쳐 그린 후, 선과 점을 drv 에 따라 색상을 입히면 좀 더 명료하게 만들 수 있다.
ggplot(data = mpg)+
geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv, color = drv))+
geom_point(mapping = aes(x = displ, y = hwy, color = drv))
geom_smooth() 을 포함한 많은 수의 지옴은 데이터의 여러 행을 표시하기 위해 하나의 기하객체를 사용한다. 이러한 지옴들에 대해 그룹 심미성을 설정하여 위의 플롯 처럼 다중 객체를 그릴 수 있다.
ggplot2는 그룹 변수의 각 고윳값에 따라 별도의 객체를 그린다. 실제로 ggplot2는 심미성을 변수에 매핑할 때마다 이 지옴들에 대한 데이터를 자동으로 그룹화한다. 그룹 심미성을 기본적으로 범례를 추가하거나 구별시켜주는 기능들을 추가하지 않기 때문에, 이 기능을 활용하면 편리하다.
# 1 )
ggplot(data = mpg)+
geom_smooth(mapping = aes(x = displ, y = hwy))
# 2 ) group = drv
ggplot(data = mpg)+
geom_smooth(mapping = aes(x = displ, y = hwy, group = drv))
# 3 ) color = drv
ggplot(data = mpg)+
geom_smooth(
mapping = aes(x = displ, y = hwy, color = drv),
show.legend = FALSE)
같은 플롯에서 여러 지옴을 표시하려면 ggplot() 에 여러 지옴 함수를 추가하면 된다.
# example
ggplot(data = mpg)+
geom_point()+
geom_smooth()
지옴 함수에 매핑을 넣으면 ggplot2는 해당 레이어에 대한 로컬 매핑으로 처리한다. 이렇게 되면 해당 레이어에만 이 매핑이 추가되거나 전역 매핑을 덮어쓴다. 즉, 다른 레이어마다 다른 심미성을 표시하는 것이 가능하다.
ggplot(data = mpg, mapping = aes(x = displ, y = hwy))+
geom_point(mapping = aes(color = class))+
geom_smooth()
같은 원리로 레이어마다 다른 데이터를 지정할 수 있다. 여기서 우리의 평활선은 mpg 데이터셋의 서브셋인 경차(subcompact)만을 표시한다. geom_smooth() 의 로컬 데이터 인수는 해당 레어어에 한해서만 ggplot() 의 전역 데이터 인수를 덮어쓴다.
# install.packages("dplyr")
library(dplyr)
ggplot(data = mpg, mapping = aes(x = displ, y = hwy))+
geom_point(mapping = aes(color = class))+
geom_smooth(
data = filter(mpg, class == "subcompact"),
se = FALSE)
연습문제
1. 선 그래프, 박스 플롯, 히스토그램, 면적 차트를 그리기 위한 지옴 함수
- 선 그래프 : geom_smooth() , 박스 플롯 : geom_boxplot ,
- 히스토그램 : geom_histogram() , 면적 차트 : geom_area()
2. 다음 코드를 실행하면 출력이 어떨지 예측해보라 그런 다음 코드를 실행하고 예측을 확인하라.
ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv))+
geom_point()+
geom_smooth(se = FALSE)
3. show.legend = FALSE 는 어떤 역할을 하는가? 삭제하면 어떻게 되는가?
- show.legend 는 범례표시 유무를 결정한다. 따라서 FALSE일 경우 범례가 표시되지않는다
- show.legend = FALSE 를 삭제하면 범례가 표시되는 것을 알 수 있다.
4. geom_smooth() 의 se 인수는 어떤 역할을 하는가?
- se 옵션은 추정된 smooth line의 표준오차 출력 여부를 결정한다.
- 따라서 FALSE일 경우 표준오차를 출력하지 않는다.
5. 다음 두 그래프는 다르게 나타나는가? 이유는 무엇인가?
# 1 )
ggplot(data = mpg, mapping = aes(x = displ, y = hwy))+
geom_point()+
geom_smooth()
# 2 )
ggplot()+
geom_point(data = mpg, mapping = aes(x = displ, y = hwy))+
geom_smooth(data = mpg, mapping = aes(x = displ, y = hwy))
- 두 그래프는 같게 나타난다.
- 첫 번째 코드에서는 ggplot에 모든 지옴함수에서 사용할 데이터와 mapping을 나열했다
- 두 번째 코드에서는 첫 번째 코드에서 ggplot에 정의했던것과 같은데이터와 mapping을 각각의 지옴함수에서 작성했다.따라서 두 코드는 같은 그래프를 출력한다.
6. 다음의 그래프들을 생성하는데 필요한 R코드 작성
# 1
ggplot(data = mpg, mapping = aes(x = displ, y = hwy))+
geom_point()+
geom_smooth(se = FALSE)
# 2 : 1번 플롯에서 group별 평활선 추가
ggplot(data =mpg, mapping = aes(x = displ, y = hwy))+
geom_point()+
geom_smooth(mapping = aes(x = displ, y = hwy, group = drv), se = FALSE)
# 3 : drv 별 point, linetype color
ggplot(data =mpg, mapping = aes(x = displ, y = hwy, color = drv))+
geom_point()+
geom_smooth(mapping = aes(x = displ, y = hwy, group = drv), se = FALSE)
# 4 : drv 별 point color
ggplot(data =mpg)+
geom_point(mapping = aes(x = displ, y = hwy, color = drv))+
geom_smooth(mapping = aes(x = displ, y = hwy),se = FALSE)
# 5 : drv 별 point color, linetype
ggplot(data =mpg)+
geom_point(mapping = aes(x = displ, y = hwy, color = drv))+
geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv),se = FALSE)
# 6 : point design
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point(size = 4, color = "white") +
geom_point(aes(colour = drv))
'Study > R' 카테고리의 다른 글
[R4DS] 1장 데이터 시각화 - 06 위치조정 (0) | 2022.01.10 |
---|---|
[R4DS] 1장 데이터 시각화 - 05 통계적 변환 (0) | 2022.01.10 |
[R4DS] 1장 데이터 시각화 - 03 facet (0) | 2021.11.27 |
[R4DS] 1장 데이터 시각화 - 02 심미성 매핑 (0) | 2021.11.16 |
[R4DS] 1장 데이터 시각화 - 01 첫 단계 (0) | 2021.11.16 |