철솜_STUDY
R로 데이터 시각화 _ ggplot2() _1 본문
library(tidyverse)
gglplot 함수를 담고 있는 library가 tidyverse이므로 ggplot를 사용하고 싶다면 먼저 해당 라이브러리를 로딩해줘야 한다.
ggplot()에는 세 가지 요소가 있다.
data & aesthetic mapping & layer
어떤 data로 그림을 그릴 것인지
어떤 심미적 대응 관계를 따질 것인지
어떤 layer를 얹을 것인지를 결정해야 한다는 것이다.
* layer 구조로 하나씩 그래프가 쌓이기 때문에 +를 통해 여러 개의 layer를 쌓는 계층적 문법이다.
예시를 보여주자면 다음과 같다.
ggplot(mpg,aes(x=displ, y=hwy))+geom_point()
이 코드는 geom_point( )를 이용해 산점도를 그리게 된다.
data는 mpg를 사용하게 되고, aes를 통해 x 축에는 displ 변수가, y축에는 hwy 변수가 들어감을 보여준다.
#aes ()
앞서 본 것처럼 aes 함수에서는 x와 y축 내용을 결정할 수 있다.
그 외에도 colour, size, shape, fill = 옵션을 지정할 수 있다.
* fill 옵션을 지정할 경우 alpha= 라는 투명도 옵션을 넣을 수 있는데 이는 density 함수처럼 layer 파트에 들어가야 한다.
ggplot(mpg, aes(displ, hwy,color=class))+geom_point()
ggplot(mpg, aes(displ, cty, size=cyl))+geom_point()
ggplot(mpg, aes(displ, cty, shape=drv))+geom_point()
ggplot(mpg, aes(displ, cty, size=cyl))+geom_point()
#geom_ 의 종류
## 하나의 연속 변수에 대하여
1. 히스토그램 --> geom_histogram(binwidth = ,)
*bin = 구간이라고 보면 된다. bins=구간의 갯수 & binwidth = 구간의 너비 설정
** binwidth를 점차 작게 만들면서 어떤 식으로 구성돼 있는지 특징을 파악하는 것이 중요하다.
2.히스토그램의 구간 중간점에 도수를 표시하여 그 점들을 직선으로 연결한 선형의 그래프
-> geom_freqpoly ( )
** 하나의 자료에서 특정 2개의 그룹을 비교하고 싶을 때는 히스토그램보다는 freqpoly가 더 시각적으로 명확한 정보를 제공
ggplot(tips, aes(tip, color=sex))+geom_histogram()
ggplot(tips,aes(tip, color=sex))+geom_freqpoly()
3. 밑의 면적이 1이 되는 곡선을 찾아주는 함수 --> geom_density(bw = 0.1)
** 아래의 면적이 1로 동일하기 때문에 자료의 갯수가 다르다고 하더라도 명확한 비교가 가능하다.
ggplot(tips, aes(tip))+geom_density(bw=0.1)
ggplot(tips, aes(tip, color=sex))+geom_density(bw=0.5)
#하나의 범주형 변수에 대하여
1. 막대 그래프 --> geom_bar( )
** 범주형 변수는 내부적으로 범주의 순서를 결정한다. 그렇기 때문에 내가 원하는 순서로 변경해주는 과정이 필요하다.
TipsDay = data.frame(day=factor(c("Thur", "Fri", "Sat", "Sun"), levels=c("Thur", "Fri", "Sat", "Sun")), count=c(62, 19, 87, 76))
TipsDay
## day count
## 1 Thur 62
## 2 Fri 19
## 3 Sat 87
## 4 Sun 76
ggplot(TipsDay, aes(day, count))+geom_bar(stat="identity") #1
- stat=identity라는 옵션은 해당 table을 바탕으로 그대로 bar를 나타내라는 옵션
2. 파이 차트 --> bar 차트를 응용한 구조이다.
ggplot(TipsDay, aes(x='', y=count, fill=day))+geom_bar(stat="identity")
ggplot(TipsDay, aes(x='', y=count, fill=day))+geom_bar(stat="identity")+coord_polar("y")
#하나의 범주형 변수 + 하나의 연속형 변수
1. 산점도 --> geom_point ( ) ** 많이 사용하지 않음
2. 산점도 + 랜덤 노이즈를 더해 겹쳐지지 않게 그리는 방법 --> geom_jitter()
- Jittering = 범주형, 연속형 변수가 섞인 경우 연속형 변수가 찍힌 모습이 실제 자료의 갯수를 가시적으로 확인할 수 없는 그래프일 수 있다. -> 자료에 랜덤 노이즈를 더해 겹쳐져서 그려지지 않게 하는 방법
3. 상자 그림 & 바이올린 그림(실제의 분포를 보여주는 자료)
--> geom_boxplot(width = ) & geom_violin( )
이 세 가지 그림을 모두 겹쳐서 그릴 경우 좋은 그림이 될 수 있다.
그러나 지저분해 보일 수 있기 때문에 jitter 옵션을 따로 그리거나, boxplot 의 width 옵션을 설정해 boxplot이 violin 그림 안에 들어가도록 그린다.
ggplot(tips, aes(day, tip))+geom_violin()+geom_boxplot(width=1)
ggplot(tips, aes(day, tip))+geom_violin()+geom_boxplot(width=0.2)
4.freqploy & density 와 colour 옵션을 함께 사용하는 경우, colour이 범주형 변수를 나타내는 역할을 한다.
histogram 은 colour & fill & facet_warp 을 이용해 명확하게 보여주게 된다.
ggplot(tips, aes(total_bill, color=day))+geom_freqpoly(binwidth=5) #freqpoly
ggplot(tips, aes(total_bill, color=day))+geom_density() #density로 명확한 비교교
ggplot(tips, aes(total_bill, color=day, fill=day))+geom_density(alpha=0.5) #투명도 옵션 추가
ggplot(tips, aes(total_bill, color=day, fill=day))+geom_histogram()+facet_wrap(~day, ncol=1)
# 두 개의 연속 변수
1. 산점도 --> geom_point ( )
2. smooth line & se 표현 --> geom_smooth(method = 'lm', span = 0~1 사이 값, se=FALSE)
* span = 옵션은 곡선이 점의 변동을 어느 정도 반영할 것인지 결정하는 것으로 1에 가까울 수록 부드러워지고, 0에 가까울 수록 점의 변동을 더 많이 반영해 선의 곡률이 심해진다.
ggplot(tips, aes(total_bill, tip))+geom_point()+geom_smooth(span=0.1)
ggplot(tips, aes(total_bill, tip))+geom_point()+geom_smooth(span=1)
## 두 개의 범주형 변수
library(ggmosaic) 안의 함수를 이용해야 하므로 해당 라이브러리를 우선 로딩해준다
1. geom_mosaic( ) ** 앞의 함수들과 달리 aes()를 ggplot이 아닌 geom_mosaic 내에서 설정해 준다.
Titanic.data = as.data.frame(Titanic)
ggplot(Titanic.data)+geom_mosaic(aes(x=product(Class), weight=Freq, fill=Survived))
x변수 = Class 사용
-> product를 사용해야 각 Class 별로 count 하는게 가능함. Freq를 weight로 준 다음에 count 계산한 것.
-> x 축을 class의 Freq에 따라서 나눠줌.
-> y 축을 survived로 채워준 것.
# 셋 이상의 변수들 // 셋 이상의 범주형 자료
- 셋 이상의 변수일 경우
library(GGally) 를 먼저 로딩해서 산점도 행렬을 이용하게 된다.
ggpairs( )
ggpairs(tips)
- 셋 이상의 범주형 자료일 경우
---> geom_mosaic 이용 + conds = 라는 옵션 추가 설정
ggplot(Titanic.data)+geom_mosaic(aes(x=product(Age), conds=product(Class), weight=Freq, fill=Survived))
# 시계열 자료 시각화
1. 산점도에서 위치에 따라 왼쪽에서 오른쪽 순으로 모든 점을 연결 ---> geom_line( )
!= geom_path( ) : 점들을 자료 순서대로 연결.
ggplot(economics, aes(date, psavert))+geom_line()
#Facetting
1. Facet_wrap(~a, ncol= ) : class 가 많아서 보기 어려울 때 쪼개는 방법 & 몇 개의 열로 그래프를 나타낼 건지 설정해줄 수 있다.
'Lecture_Statistics' 카테고리의 다른 글
R로 데이터 시각화 _ ggplot2() _3 (1) | 2024.10.09 |
---|---|
R로 데이터 시각화 _ ggplot2() _2 (1) | 2024.10.09 |
R 프로그래밍 기본 (1) | 2024.10.07 |