从ggplot轴中删除非工作日

时间:2018-02-07 00:50:10

标签: r ggplot2

我想用ggplot2绘制不同索引的开发。我的问题是,2018-02-03和2018-02-04是非工作日,因此目前没有可用的数据,但是当绘制ggplot2时通过外推添加它们。我怎么能省略非工作日,以便2018-02-02接着2018-02-05?

library(tidyverse)
library(quantmod)

#retrieve data
getSymbols("BTCUSD=X;^DJI;^VIX;^GDAXI", from="2017-01-01")

#merge all dataframes together
df <- merge(`BTCUSD=X`,`DJI`, all = TRUE)
df <- merge(df, `VIX`, all = TRUE)
df <- merge(df, `GDAXI`, all = TRUE)

#creating a dataframe with first column as date that comes from xts object extracted by index()
df <- data.frame(date=index(df), coredata(df))

#selecting columns and filtering the time series start date
df_1 <- df%>% select(date, contains("Close"))%>% na.omit() %>% filter(date>"2018-01-25")
#df_1 <- df_1 %>%mutate(BTCUSD.X.Close=BTCUSD.X.Close/BTCUSD.X.Close[1], DJI.Close=DJI.Close/DJI.Close[1], GDAXI.Close=GDAXI.Close/GDAXI.Close[1], VIX.Close=VIX.Close/VIX.Close[1])
df_1 <- df_1 %>% gather(var, closing,  2:5)

png("indexes.png", width = 9, height = 6, units = 'in', res = 600)
plot_1 <- ggplot(data=df_1)+
        geom_line(aes(x=date, y=closing))+
        facet_wrap(~var, scales = "free")+
        scale_x_date(breaks = df_1$date, date_minor_breaks = "1 day", date_labels = "%y-%m-%d")+
        theme(text = element_text(size=7), axis.text.x = element_text(angle = 90, hjust = 1))
plot_1
dev.off()
plot_1

enter image description here

1 个答案:

答案 0 :(得分:2)

bdscale是专为此目的而设计的,一旦添加,您就可以用scale_x_date行代替:

scale_x_bd(
  business.dates = df_1$date,
  max.major.breaks = 10,
  labels = date_format("%y-%m-%d")
)

制作这个情节...

enter image description here

完全可重现的代码

library(tidyverse)
library(quantmod)
library(bdscale)
library(scales)

getSymbols("BTCUSD=X;^DJI;^VIX;^GDAXI", from = "2017-01-01")

df <- merge(`BTCUSD=X`,`DJI`, all = TRUE) %>%
  merge(`VIX`, all = TRUE) %>%
  merge(`GDAXI`, all = TRUE)

df <- data.frame(date = index(df), coredata(df))

df_1 <- df %>%
  select(date, contains("Close")) %>%
  na.omit %>%
  filter(date > "2018-01-25") %>%
  gather(var, closing,2:5)

ggplot(data = df_1, aes(x = date, y = closing)) +
  geom_line() +
  facet_wrap(~var, scales = "free") +
  scale_x_bd(business.dates = df_1$date,
             max.major.breaks = 10,
             labels = date_format("%y-%m-%d")) +
  theme(text = element_text(size = 7),
        axis.text.x = element_text(angle = 90, hjust = 1))