[ggplot2 패키지]
그래프 그리기
- ggplot() 함수로 그래프 틀 만들고, 그 안에 다양한 이미지 객체 레이어를 계속 포개는 방식으로 표현.
1. 그래프 기본 틀 만들기 : ggplot() 함수
- ggplot() 함수 : 그래프 좌표 그리기 위한 판 짜는 함수이며, 함수 안에 aes() 함수를 이용해 X축과 Y축에 변수 매핑.
str(airquality) #데이터 세트 속성 파악
ggplot(airquality, aes(x=Day, y=Temp)) #"날짜별 온도" 시각화 위해 X축에 날짜, Y축에 온도 매핑
2. 산점도 그리기 : geom_point() 함수
- ggplot() 함수 뒤에 +geom_point() 만 추가
ggplot(airqualiry, aes(x=Day, y=Temp)) +
geom_point()
#색상, 사이즈 추가 설정
ggplot(airqualiry, aes(x=Day, y=Temp)) +
geom_point(size=3, color="red")
3. 선 그래프 그리기 : geom_line() 함수
- 선그래프는 변화를 관찰하기 쉬우며, +geom_line() 추가.
ggplot(airquality, aes(x=Day, y=Temp)) +
geom_line()
4. 막대 그래프 그리기 : geom_bar() 함수
- 막대 그래프는 하나의 변수에서 각 값의 빈도를 파악. -> X 축만 지정.
ggplot(mtcars, aes(x=cyl)) + geom_bar(width=0.5) #width 옵션으로 막대 두께 설정.
ggplot(mtcars, aes(x=factor(cyl))) + geom_bar(width=0.5) #factor() 함수로 수치형 데이터 범주화
*참고 : Bar charts (Source: R/geom-bar.r, R/geom-col.r, R/stat-count.r)
There are two types of bar charts: geom_bar() and geom_col().
- geom_bar() makes the height of the bar proportional to the number of cases in each group
(or if the weight aesthetic is supplied, the sum of the weights).
- If you want the heights of the bars to represent values in the data, use geom_col() instead.
- geom_bar() uses stat_count() by default: it counts the number of cases at each x position.
- geom_col() uses stat_identity(): it leaves the data as is.
- 누적 막대 그래프 그리기
: 하나의 변수에 대한 빈도값 안에서, 다른 변수의 빈도까지 표시함.
ggplot(mtcars, aes(x=factor(cyl))) +
geom_bar(aes(fill=factor(gear))) #gear변수의 빈도가 막대안에 색상으로 채워진다
- 누적 막대 그래프로 그리는 선버스트 차트
: 누적 막대 그래프 코드에 +coord_polar() 추가
*coord_polar() 함수에 theta="y" 옵션 추가하면, 가운데가 도넛처럼 비어있는 선버스트 차트 그려짐.
5. 상자 그림 그리기 : geom_boxplot() 함수
- aes() 함수 안에 상자로 그룹 지을 열을 설정해야 함.
- 그룹 옵션으로 x축 변수별 데이터 분포를 확인 할 수 있음.
- 분포에서 심하게 벗어난 극단의 이상치 확인 가능.
ggplot(airquality, aes(x=Day, y=Temp, group=Day)) +
geom_boxplot()
6. 히스토그램 그리기 : geom_histogram() 함수
- 도수 분포를 기둥 모양의 그래프로 표현한 히스토그램으로, 연속되는 구간을 가짐.
- binwidth 옵션으로 막대 너비 조정 가능.
ggplot(airquality, aes(Temp)) +
geom_histogram(binwidth=1)
그래프에 객체 추가
1. 사선 그리기 : geom_abline() 함수
- 그래프에 사선을 추가하여, 그래프의 추세 확인할 수 있음.
- 사선은 절편과 기울기 이용하여 geom_abline() 함수로 그림.
ggplot(economics, aes(x=data, y=psavert)) +
geom_line() +
geom_abline(intercept = 12.18671, slope = -0.0005444) #intercept 절편, slope 기울기
2. 평행선 그리기 : geom_hline() 함수
- 주로 평균값에 평행선을 그려, 그래프 변동 추이를 확인.
ggplot(economics, aes(x=date, y=psavert)) +
geom_line() +
geom_hline(yintercept = mean(ecom=nomics$psavert)) #yintercept=y절편값 입력
3. 수직선 그리기 : geom_vline() 함수
- 특정 위치를 표시할 때 사용.
library(dplyr)
x_inter <- filter(economics, psavert ==
min(economics$psavert))$date
ggplot(economics, aes(x=date, y=psavert)) +
geom_line() +
geom_vline(xintercept = x_inter)
geom_vline(xintercept = as.Date("2005-07-01"))
4. 레이블 입력하기 : geom_text() 함수
- 그래프 위에 텍스트가 직접 표현되며, 레이블 이라고 한다. 그래프 안에서 각 수치의 이름이나 값 등 표시할 때 사용.
ggplot(airquality, aes(x=Day, y=Temp)) +
geom_point() +
geom_text(aes(label = Temp, vjust = 0, hjust = 0)) #label=레이블, vjust=세로위치, hjust=가로위치
5. 도형 및 화살표 넣기 : annotate() 함수
- 그래프 위에 사각형이나 화살표 등으로 특정 영역을 강조할 때 사용.
ggplot(mtcars, aes(x= wt, y= mpg)) +
geom_point() +
annotate("rect", xmin=3, xmax=4, ymin=12, ymax=21,
alpha = 0.5, fill = "skyblue") +
annotate("segment", x=2.5, xend=3.7, y=10, yend=17,
color='red', arrow=arrow()) +
annotate("text", x=2.5, y=10, label="point")
#모양옵션:rect(직사각형),segment(선) / alpha옵션:투명도
#화살표는 arrow=arrow() 옵션 추가
#화살표 같은 선스타일 도형은 x축, y축의 시작위치와 끝위치를 x, x.end와 y,y.end로 표현
#text 입력하고, 표시될 x와 y위치 값과 표시할 내용 입력
6. 그래프와 축에 제목 추가하고 디자인 테마 적용하기
- 그래프 제목 및 축 제목 추가하기 : labs() 함수
ggplot(mtcars, aes(x= gear)) + geom_bar() +
labs(x= "기어수", y= "자동차수", title= "변속기 기어별 자동차수")
- 디자인 테마 적용하기 : theme() 함수
theme_gray(), theme_bw(), theme_linedraw(), theme_light(), theme_dark(), theme_minimal(),
theme_classic(), theme_void()
7. 절편과 기울기 구하기 : 회귀분석
- 회귀분석 : 독립변수와 종속변수 간의 인과관계를 구하는 분석 기법
- 단순회귀분석(독립변수 1개), 다중회귀분석(독립변수 2개이상)
- 단순회귀분석은 두 변수 간의 관계식을 도출하는 분석 기법이며,
두 변수간의 선형성, 독립성, 정규분포, 등분산성을 가정하는 분석으로, lm() 함수를 이용해
두변수간의 p-value, 절편, 기울기를 구할 수 있다.
1) 두 변수 간 상관관계 파악하기 : cor.test() 함수
- 상관관계 있으면 cor 값이 1(양의 상관관계) 또는 -1(음의 상관관계)로 나타남.
0에 가까울수록 두 변수 간의 상관관계가 없음을 의미.
- p-value(significance probability, 유의확률) : 두 변수간 상관관계가 통계적으로 의미 있는지 판단하는 검정통계량.
p-value값이 기준값보다 작으면 귀무가설 확률이 매우 낮다는 의미로, 귀무가설을 기각하고 대립가설을 채택함.
(일반적으로 p-value값이 0.05보다 작으면 통계적으로 유의하다고 해석함.)
> library(readxl) #라이브러리 불러오기
> exdata1 <- read_excel("../0414/data/Sample1.xlsx") #엑셀 데이터 불러오기
> cor.test(exdata1$Y20_CNT, exdata1$Y21_CNT) #두 변수간 상관분석
Pearson's product-moment correlation
data: exdata1$Y20_CNT and exdata1$Y21_CNT
t = 4.9343, df = 18, p-value = 0.000107
alternative hypothesis: true correlation is not equal to 0 #대립가설
95 percent confidence interval: #신뢰구간
0.4751688 0.8990895
sample estimates: #표본추정치
cor #상관성
0.7582507
- cor값은 1에 가까우므로 두 변수가 양의 상관관계에 있으며, p-value값이 0.000107이므로 통계적으로 유의하다.
2) 절편과 기울기 구하기 : lm() 함수
- 두 변수 간 상관관계가 있는 것이 확인되었으니 lm() 함수로 절편과 기울기를 구함.
> reg_result <- lm(Y20_CNT ~ Y21_CNT, data = exdata1)
> reg_result
Call:
lm(formula = Y20_CNT ~ Y21_CNT, data = exdata1)
Coefficients:
(Intercept) Y21_CNT
7.9605 0.7311
> ggplot(exdata1, aes(x = Y20_CNT, y= Y21_CNT)) +
geom_line() +
geom_abline(intercept = 7.9605, slope = 0.7311) #y절편, 기울기 넣어서 사선 그리기