2015-11-08 197 views
2

我無法弄清楚我錯過了什麼。我不停地撞擊或導致它給出非常奇怪的情節。facet_grid()導致崩潰

> 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

嘗試'scale =「free」'或另一個記錄值 – baptiste

+0

我得到這個或錯誤:美學必須是長度爲1或與dataProblems長度相同:vData或geom_path:每個組只包含一個觀察值。你需要調整團體審美嗎? – John

+2

我不知道你希望做什麼,但似乎不太可能將Date同時用作x軸和作爲刻面變量。 – baptiste

回答

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

因此,想一想你到底想要展示什麼。