在 R 中获取多变量时间序列的堆积面积图(一个 xts 对象)
Getting a stacked area plot in R for multivariate time series (an xts object)
我有一个多变量时间序列,想要获得堆积面积图。如何使用 ggplot2
?
完成此操作
数据可能如下所示:
dates = as.Date(c("2015-04-07","2015-04-08","2015-04-09"))
stocks = xts(c(0.4,0.7,0.9),order.by = dates)
dates = as.Date(c("2015-04-07","2015-04-08","2015-04-09","2015-04-10"))
bonds = xts(c(0.6,0.3,0.1,1),order.by = dates)
example.data = merge(stocks,bonds)
我对 ggplot 很陌生。上面的数据是长格式的。我看过宽幅面的例子。如何在不更改数据结构的情况下使用 x 轴的数据索引?
在不改变数据结构的情况下,您可以尝试以下操作:
qplot(rep(index(example.data),2), c(coredata(example.data$stocks),
coredata(example.data$bonds)), geom = "blank") +
geom_area(aes(colour = rep(c("stocks", "bonds"), each = 4),
fill = rep(c("stocks", "bonds"),each = 4)))
给出:
或使用 reshape2
中的 melt
:
library(reshape2)
df <- data.frame(time = index(example.data), melt(as.data.frame(example.data)))
ggplot(df, aes(x = time, y = value)) +
geom_area(aes(colour = variable, fill = variable))
我有一个多变量时间序列,想要获得堆积面积图。如何使用 ggplot2
?
数据可能如下所示:
dates = as.Date(c("2015-04-07","2015-04-08","2015-04-09"))
stocks = xts(c(0.4,0.7,0.9),order.by = dates)
dates = as.Date(c("2015-04-07","2015-04-08","2015-04-09","2015-04-10"))
bonds = xts(c(0.6,0.3,0.1,1),order.by = dates)
example.data = merge(stocks,bonds)
我对 ggplot 很陌生。上面的数据是长格式的。我看过宽幅面的例子。如何在不更改数据结构的情况下使用 x 轴的数据索引?
在不改变数据结构的情况下,您可以尝试以下操作:
qplot(rep(index(example.data),2), c(coredata(example.data$stocks),
coredata(example.data$bonds)), geom = "blank") +
geom_area(aes(colour = rep(c("stocks", "bonds"), each = 4),
fill = rep(c("stocks", "bonds"),each = 4)))
给出:
或使用 reshape2
中的 melt
:
library(reshape2)
df <- data.frame(time = index(example.data), melt(as.data.frame(example.data)))
ggplot(df, aes(x = time, y = value)) +
geom_area(aes(colour = variable, fill = variable))