ggplot2绘制两个不同长度的矢量,从较小的一个开始
问题描述:
我正在使用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))
答
感谢您的更新!让我打电话给你的数据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
请提供获取剧情的
SPX
我们有一些数据,所以我们可以更好地解决您的问题 –谢谢@Jacob H您的兴趣。我不知道如何上传一个CSV文件到这个网站,所以我会给一个基本的描述。我的csv文件的前三栏是日期,道琼斯工业平均收盘价和标准普尔500收盘价。前两列的数据可追溯至1900年。然而,标准普尔开始于1928年,因此直到1928年才有空单元格。我使用ggplot2 geom_line来绘制每列与日期列的对应关系。我希望情节从每列的第一个值开始,而不是始终在1900年开始。 – MBA
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