2016-09-21 90 views
0

我正在使用R.我有一個每天回到1900年的表。一些矢量在1900年開始有些只在1950年開始等。我想根據日期向量繪製每個向量。不過,我想每一個情節開始時的y向量開始,而不是總是在1900年ggplot2繪製兩個不同長度的矢量,從較小的一個開始

這裏開始就是一個例子:

structure(list(Date = structure(c(5L, 6L, 7L, 8L, 1L, 2L, 3L, 
4L), .Label = c("1/3/1928", "1/4/1928", "1/5/1928", "1/6/1928", 
"12/28/1927", "12/29/1927", "12/30/1927", "12/31/1927"), class = "factor"), 
DJIA = c(198.6, 199.96, 200.7, 202.4, 203.35, 202.24, 199.61, 
201.45), SPX = c(NA, NA, NA, NA, 17.76, 17.72, 17.55, 17.66 
)), .Names = c("Date", "DJIA", "SPX"), class = "data.frame", row.names = c(NA, 
-8L)) 
+2

請提供獲取劇情的SPX我們有一些數據,所以我們可以更好地解決您的問題 –

+0

謝謝@Jacob H您的興趣。我不知道如何上傳一個CSV文件到這個網站,所以我會給一個基本的描述。我的csv文件的前三欄是日期,道瓊斯工業平均收盤價和標準普爾500收盤價。前兩列的數據可追溯至1900年。然而,標準普爾開始於1928年,因此直到1928年纔有空單元格。我使用ggplot2 geom_line來繪製每列與日期列的對應關係。我希望情節從每列的第一個值開始,而不是始終在1900年開始。 – MBA

+0

TY @JacobH不知道如何上傳csv文件,所以我將舉一個例子。前三列是日期,道瓊斯工業平均收盤價和標準普爾500收盤價。前兩列的數據可追溯至1900年。標準普爾開始於1928年,因此直到1928年纔有空單元格。我使用ggplot2 geom_line來繪製每一列的日期。我希望情節從每列的第一個值開始,並不總是從1900開始。ggplot(master,aes(date,SPX))+ geom_line(stat =「identity」,na.rm = T)+ scale_x_date( labels = date_format(「%m /%d /%Y」),date_breaks ='5 years') – MBA

回答

0

感謝您的更新!讓我打電話給你的數據d

d <- structure(list(Date = structure(c(5L, 6L, 7L, 8L, 1L, 2L, 3L, 
           4L), .Label = c("1/3/1928", "1/4/1928", "1/5/1928", "1/6/1928", 
               "12/28/1927", "12/29/1927", "12/30/1927", "12/31/1927"), class = "factor"), 
      DJIA = c(198.6, 199.96, 200.7, 202.4, 203.35, 202.24, 199.61, 
        201.45), SPX = c(NA, NA, NA, NA, 17.76, 17.72, 17.55, 17.66 
        )), .Names = c("Date", "DJIA", "SPX"), class = "data.frame", row.names = c(NA, 
                           -8L)) 

與此數據的第一個問題是,Date是一個因素,正確地繪製,我們首先需要將其更改爲Date

d$Date <- as.Date(d$Date, "%m/%d/%Y") 

的最簡單方法實現你想要的輸出是刪除NA如下

ggplot(d[complete.cases(d[,c("Date", "SPX")]), ], aes(x = Date, y = SPX)) + 
    geom_line() 

但是,我懷疑你會是g大量的這些數字。創建你自己的劇情功能可能是一個更好的主意。

myplot <- function(data, myX, myY){ 
    data <- data[complete.cases(data[,c(myX, myY)]), ] 
    ggplot(data, aes_string(x = myX, y = myY))+ 
    geom_line() 
} 

通知的aes_string,這簡化了變量名的傳遞。有可能使用aes,但它有點複雜。

有了這個功能,你可以繪製各列的代碼現在

myCOL <- c("DJIA", "SPX") #names of columns, note they are in quotes. This is because we're using aes_string 

allPLOT <- lapply(myCOL, function(x) myplot(d, "Date", x)) 

names(allPLOT) <- myCOL #naming the elements of the list 

所有的地塊都存儲在一個列表,例如,你可以通過調用

allPLOT$SPX 
+0

當我使用你的第一個版本時,我得到這個錯誤:geom_path:每個組只包含一個觀察。你需要調整團體審美嗎? – MBA

+0

謝謝你的幫助@JacobH,但是當我嘗試你的第二個版本時,我得到了這個錯誤:geom_path:每個組只包含一個觀察值。你需要調整團體審美嗎?儘管x軸開始於y值開始時沒有任何顯示 – MBA

+0

我明白了!由於某種原因,我不能 – MBA