从ggplot轴删除非工作日 [英] Removing the non-business days from ggplot axis

查看:90
本文介绍了从ggplot轴删除非工作日的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用ggplot2绘制不同索引的发展情况.我的问题是,2018-02-03和2018-02-04是非工作日,因此这些天没有可用数据,但是在绘制ggplot2时会通过外推法添加它们.我该如何省略非工作日,以便得到2018-02-02,然后是2018-02-05?

I would like to plot the development of different indexes with ggplot2. My problem is, that 2018-02-03 and 2018-02-04 are non-working days, and thus there is no data available for these days, but when plotting ggplot2 adds them by extrapolating. How could I omit the non-business days, so that I get 2018-02-02 followed by 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

推荐答案

bdscale是为此目的而设计的,添加后,您可以将scale_x_date行替换为:

The package bdscale was designed for this purpose, once added, you can substitute your scale_x_date line with:

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

要生成此图...

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))

这篇关于从ggplot轴删除非工作日的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆