본문 바로가기

정리/코드

ggplot2 그래프 화면 분할 코드

728x90

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 의 화면 분할 포스팅을 여기서 마치겠습니다.