facet_grid()导致崩溃

时间:2015-11-08 03:29:58

标签: r ggplot2 facet

我无法弄清楚我错过了什么。我不停地撞击或导致它给出非常奇怪的情节。

> head(vData)
           vix.Close  vstoxx vxfxi.Close       Date
2011-03-16     29.40 35.2293       35.84 2011-03-16
2011-03-17     26.37 30.6133       31.77 2011-03-17
2011-03-18     24.44 28.5337       29.31 2011-03-18
2011-03-21     20.61 25.2355       25.95 2011-03-21
2011-03-22     20.21 24.3914       24.52 2011-03-22
2011-03-23     19.17 23.9226       24.03 2011-03-23

以下作品:

 p1.1<-ggplot(data = vData, aes(x = Date, y = vix.Close)) + geom_line(col= "red")
 p1.1

 p2<-p1.1 + geom_line(data = vData[!is.na(vData$vstoxx),], aes(x = Date, y = vstoxx), col="blue") 
 p2
 p3<-p2 + geom_line(data = vData[!is.na(vData$vxfxi.Close),], aes(x = Date, y = vxfxi.Close), col="green")
 p3

 p4<-p3 + labs(title = "Volatility Indexes", x = "Time", y = "Index") 
 p4

但这是给我带来麻烦的部分:

 p5<- p4 + facet_grid(Date~., scales = Date)
 p5

1 个答案:

答案 0 :(得分:0)

我回应巴蒂斯特所说的:你想做什么?您提供的代码表明您正在尝试为数据集中的每个日期创建单独的折线图,这没有多大意义。在本演示中,我将向您展示如何按年分面数据,以查看不同波动率测量值之间的相关性。如果您提供更多详细信息作为评论,我将重新访问代码。

首先让我们来看看你已经做过的事情。

library(tidyverse)
library(gridExtra)
library(lubridate)
library(reshape2)

#Generate dummy data
vData <- tibble(
  vix.Close   = rnorm(1000, mean = 12, sd = 5),
  vstoxx      = rnorm(1000, mean = 12, sd = 5),
  vxfxi.Close = rnorm(1000, mean = 12, sd = 5),
  Date = as.Date(1:1000, origin = '2011-01-01')
)

# Generate individual plots per your question
p1.1 <-
  ggplot(data = vData, aes(x = Date, y = vix.Close)) + geom_line(col = "red")
p1.1

p2 <-
  p1.1 + geom_line(data = vData[!is.na(vData$vstoxx), ], aes(x = Date, y = vstoxx), col =
                     "blue")
p2
p3 <-
  p2 + geom_line(data = vData[!is.na(vData$vxfxi.Close), ], aes(x = Date, y = vxfxi.Close), col =
                   "green")
p3

p4 <-
  p3 + labs(title = "Volatility Indexes", x = "Time", y = "Index")
p4

您正在创建四个不同的图,然后将它们叠加在一起。这种方法在这里工作,但是对ggplot的每个调用进行更改或者如果要添加/删除变量都很麻烦。我们将您的数据转换为“长”格式并简化ggplot调用。

# Melt the data into three columns and remove NAs
vData <- melt(vData, id = "Date") %>%
  filter(!is.na(value)) %>%
  tbl_df()

# Create one ggplot for all three indexes
ggplot(data = vData, aes(x = Date, y = value, color = variable)) +
  geom_line() +
  labs(title = "Volatility Indexes", x = "Time", y = "Index")

现在又回到了一个大问题:你不应该按日期进行分区,因为那样会给你带来大量难以理解的细线图。还有许多其他方面可能有意义。例如,您可以按年查看三个索引的分布。

ggplot(data = vData, aes(x = variable, y = value, color = variable)) +
  geom_boxplot() +
  labs(title = "Volatility Indexes", x = "", y = "") +
  facet_grid(year(Date) ~ .)

因此,请考虑一下您想要展示的内容。