我想绘制一长串时间序列对象的叠加。
class(ts.l)
# [1] "list"
class(ts.l[[1]])
# [1] "xts" "zoo"
我知道ts.plot()
可以做到这一点。因此,当我调用命令ts.plot(as.ts(ts.l[[1]]), as.ts(ts.l[[2]]), as.ts(ts.l[[2]]))
时,它可以工作。
但我不知道如何将整个列表同时提供给ts.plot()
。以下代码行都不起作用:
ts.plot(unlist(sapply(ts.l, as.ts)))
这似乎将时间序列合并为一个系列。
ts.plot(sapply(ts.l, as.ts))
生成错误消息
无法强制对象输入double
那么,有没有人知道如何处理这个问题?
答案 0 :(得分:2)
development version of xts on GitHub中的新plot.xts
处理多列xts对象。例如:
require(xts)
data(sample_matrix)
# create list of xts objects
ts.l <- as.list(as.xts(sample_matrix))
# merge xts list into one object
ts.o <- do.call(merge, ts.l)
plot(ts.o)
答案 1 :(得分:1)
我使用以下函数将accept_nested_attributes_for :invoice_position
个对象转换为xts
可以使用的格式:
ggplot2
只需输入一堆xts_to_dataframe = function(..., xts_ids) {
xts_list = list(...)
all_include_stop_time = all(sapply(xts_list, function(x) return(!is.null(attr(x, 'stop_timestamps')))))
names_null = sapply(xts_list, function(x) is.null(names(x)))
if (any(names_null)) stop('Some xts objects do not have a valid `names` attribute.')
data_frame_list = lapply(xts_list, function(xts_obj) {
xts_vars = lapply(names(xts_obj), function(xts_variable) {
output = data.frame(timestamps = index(xts_obj[,xts_variable]),
values = as.vector(xts_obj[,xts_variable]))
if (all_include_stop_time) {
output = cbind(output, stop_timestamps = attr(xts_obj, 'stop_timestamps'))
}
return(output)
})
combined_data_frame = do.call('rbind', xts_vars)
rownames(combined_data_frame) = NULL
combined_data_frame[['variable']] = rep(names(xts_obj), sapply(xts_vars, nrow))
return(combined_data_frame)
})
combined_data_frame_list = do.call('rbind', data_frame_list)
if (missing(xts_ids)) xts_ids = seq_along(data_frame_list)
combined_data_frame_list[['xts_obj_id']] = rep(xts_ids, sapply(data_frame_list, nrow))
return(combined_data_frame_list)
}
个对象,即可使用xts
绘制生成的data.frame
。例如:
ggplot2