如何将xts对象列表打印到单个时间序列图中?

时间:2016-01-26 10:08:13

标签: r plot xts

我想绘制一长串时间序列对象的叠加。

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

那么,有没有人知道如何处理这个问题?

2 个答案:

答案 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)

enter image description here

答案 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