title: '[R] ggplot2 그래프 분할(gridExtra)'
output:
pdf_document:
toc: yes
latex_engine: xelatex
html_document:
number_sections: yes
toc: yes
mainfont: NanumGothic
---
#plot 그래프 는 par로 그래프 분할
아시다 시피 R 기본 그래프인 plot으로 그릴 때는 par()를 이용해서 화면을 분할하여 그래프를 띄웁니다.
#ggplot2 그래프 분할은 grid.arrange()로 그래프 분할
![Caption for the picture.](./Pictures/Screenshot from 2018-10-28 23-26-02.png)
우리가 만들고자 하는 화면이 위와 같을 때, 다음처럼 화면을 분할하여 그래프를 그리려 합니다.
1 에는 bitcoin Envelope
2 에는 bitcoin 볼린저 밴드
3 에는 기본 bitcoin 그래프
#사용 코드 (data load)
```{r}
# install.packages("extrafont")
#load input data.
source(paste0(getwd(),'/../../bitcoin/config/formarkdown_config.R'))
library(gridExtra, verbose=F,quietly=T, warn.conflicts=F)
library(ggplot2, verbose=F,quietly=T, warn.conflicts=F)
library(scales, verbose=F,quietly=T, warn.conflicts=F)
library(lubridate, verbose=F,quietly=T, warn.conflicts=F)
res<-callBTCWON(callConnection(), "2018-10-15",NA) # bitcoin rawdata
res[['candleDT']]<-1:nrow(res) # index
res[['candleDateTime2']]<-as.POSIXct(res$candleDateTime, format = "%Y-%m-%dT%H:%M") # character to date
head(res, 50)
```
#분할 관련 코드
```{r}
## Envelope
df_env<-as.data.frame(my.EnvelopeIndicator(res$openingPrice, m=20, p=0.02))
names(df_env)<-c("env_lower","env","env_upper")
res<-cbind(res, df_env)
kk<-ggplot(res)+
geom_line(aes(x=candleDateTime2, y=openingPrice), color="blue")+
geom_line(aes(x=candleDateTime2,y=env_lower), color="red")+
# geom_line(aes(x=candleDateTime2,y=env), color="black")+
geom_line(aes(x=candleDateTime2,y=env_upper), color="red")+
scale_x_datetime(labels = date_format("%Y-%m-%d"), breaks=pretty_breaks(n = 20)(as_datetime(c("2018-10-01", "2018-10-31"))))+
labs(x = "Date", y = "Envelope Price")+
theme(axis.text.x = element_text(angle = 40, hjust = 1))
## 볼린저 밴드
df_bbands<-as.data.frame(my.BBands(data=res, m=40, std=3))
res<-cbind(res,df_bbands)
bb<-ggplot(res)+
geom_line(aes(x=candleDateTime2, y=openingPrice), color="black")+
geom_line(aes(x=candleDateTime2,y=dn), color="red")+
geom_line(aes(x=candleDateTime2,y=mavg), color="blue")+
geom_line(aes(x=candleDateTime2,y=up), color="red")+
scale_x_datetime(labels = date_format("%Y-%m-%d"), breaks=pretty_breaks(n = 20)(as_datetime(c("2018-10-01", "2018-10-31"))))+
labs(x = "Date", y = "BBands Price")+
theme(axis.text.x = element_text(angle = 40, hjust = 1))
#set window
lay <- rbind(c(1,2),
c(3,3))
aa<-ggplot(res) + geom_line(aes(x=candleDateTime2, y=openingPrice), color="black")
grid.arrange(kk,bb,aa, layout_matrix = lay)
```
#사용 코드 설명
아시다 시피 Envelope 그래프는, 볼린저 밴드 그래프 는 이전 포스팅에서 확인이 가능하십니다.
( 참고 : http://lareale.tistory.com/289 )
이를 이용해 위처럼 3개의 화면 불할로 그래프를 나타내봤습니다.
15일 경의 상승 구간에 의해 sd=3 만큼의 변동이 크게 느껴지지 않네요. (BBands Price 참고)
이를 더 응용한다면 ggplot2 와 r shiny 를 이용해 원하는 지표를 적용한 그래프를 상단에 여러개를 뿌릴 수 있도록 하면 참고 지표로 좋을 거 같군요.
이상으로 ggplot2 의 화면 분할 포스팅을 여기서 마치겠습니다.
'정리 > 코드' 카테고리의 다른 글
Reload on code changes in python (0) | 2022.10.08 |
---|---|
Bitcoin 데이터로 Envelope 와 Bollinger Band 그리기 (ggplot2) (0) | 2018.10.30 |