【发布时间】:2016-05-22 01:48:04
【问题描述】:
我正在尝试在 ggplot2 中绘制时间序列。假设我正在使用以下数据结构(2500 x 20 矩阵):
set.seed(21)
n <- 2500
x <- matrix(replicate(20,cumsum(sample(c(-1, 1), n, TRUE))),nrow = 2500,ncol=20)
aa <- x
rnames <- seq(as.Date("2010-01-01"), length=dim(aa)[1], by="1 month") - 1
rownames(aa) <- format(as.POSIXlt(rnames, format = "%Y-%m-%d"), format = "%d.%m.%Y")
colnames(aa) <- paste0("aa",1:k)
library("ggplot2")
library("reshape2")
library("scales")
aa <- melt(aa, id.vars = rownames(aa))
names(aa) <- c("time","id","value")
现在以下绘制时间序列的命令会产生一个看起来很奇怪的 x 轴:
ggplot(aa, aes(x=time,y=value,colour=id,group=id)) +
geom_line()
我发现我可以将格式更改为日期:
aa$time <- as.Date(aa$time, "%d.%m.%Y")
ggplot(aa, aes(x=time,y=value,colour=id,group=id)) +
geom_line()
这看起来更好,但仍然不是一个好的图表。我的问题尤其是如何控制 x 轴的格式。
它必须是Date 格式吗?如何控制在这两种情况下显示的休息时间(即年)?如果不使用Date,这似乎是强制性的;否则 ggplot2 使用某种有用的默认值作为我相信的休息时间。
例如以下命令不起作用:
aa$time <- as.Date(aa$time, "%d.%m.%Y")
ggplot(aa, aes(x=time,y=value,colour=id,group=id)) +
geom_line() +
scale_x_continuous(breaks=pretty_breaks(n=10))
此外,如果您有任何提示如何改善图表的整体外观,请随时添加(例如,线条看起来有点不精确,恕我直言)。
【问题讨论】:
-
您能否发布一个带有示例输入数据和预期输出的最小示例?试试
?scale_date并在其中scale_x_date也许? -
@Gopala 你什么意思?我在上面提供了MWE?首先,如果我使用
ggplot(aa, aes(x=time,y=value,colour=id,group=id)) + geom_line(),则轴根本不会显示任何中断,即没有日期格式。我想知道如何正确控制 x 轴,在我没有时间但有另一个变量的情况下也是如此。但是我认为对于这种特殊情况,使用日期格式最容易。 -
对不起,我不是说你没有提供。您的问题/问题似乎比您提供的代码简单得多。我在想一个更小的例子就足够了。是的,在这里处理日期和使用
scale_date似乎是件好事。