본문 바로가기

Lecture_Statistics

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