绘制ggplot2中仅连接连续数据的行

时间:2014-05-23 18:00:04

标签: r ggplot2

我正在绘制一个时间序列,用系数变量映射颜色。我遇到的问题是不同的因子水平位于整个数据的离散时间窗口中,因此对于给定的因子,一个窗口的末端通过一条线连接到另一个窗口的开头。该线切断了两个窗口之间绘制的不同因子。我已将geom_line()更改为geom_point(),这是可以的,但我更喜欢这些行。这是创建示例数据框的代码。

#Create dataframe
df <- data.frame(cbind(
t= c(1361347202,1361347212,1361347222,1361347232,1361347242,1361347252,1361347262), 
y = runif(7,1,5),
l =c(1,1,1,2,2,1,1)))
df$l = as.factor(df$l)

这是情节命令,

ggplot(df, aes(x = t, y=y, colour = factor(l)))+geom_line()

我喜欢红线在第3点停下来,然后在第6点再次开始。此外,我不认为这很重要,但x值实际上是POSIX变量 - 我只是将它们转换为此问题的数值。感谢

1 个答案:

答案 0 :(得分:3)

您必须修改group的{​​{1}}美学。

geom_path

enter image description here

这是一个简短的赎罪。首先,我们应该找到分组索引以将它们用作ind <- as.numeric(df$l[-1]) - as.numeric(df$l[-nrow(df)]) != 0 splitAt <- function(x, pos) split(x, cumsum(seq_along(x) %in% (pos+1))) l1 <- splitAt(as.numeric(df$l), which(ind)) names(l1) <- 1:length(l1) l2 <- lapply(seq_along(l1), function(y, n, i) { as.numeric(rep(n[[i]], length(y[[i]]))) }, y=l1, n=names(l1)) ggplot(df, aes(x = t, y=y, colour = l)) + geom_point() + geom_path(aes(group=unlist(l2))) aes。我假设一组由几个连续的红点或蓝点组成。因此,group表示应该出现换行符。然后,我们应该构建一个看起来像(例如)ind的分组变量,它将显示哪些点相互连接。我分两步执行此操作:首先将变量拆分为c(1, 1, 1, 2, 2, 3, 3)并将其存储在ind中,然后只需替换l1中的值,以便列表中的l1个节点包含只有值,等于i。结果存储在i中,如下所示:

l2

通过[[1]] [2] 1 1 1 [[2]] [3] 2 2 [[3]] [4] 3 3 将其转换为矢量,我们就完成了。我的答案和@AndreSilva提供的答案之间的区别在于我们如何处理从一种颜色到另一种颜色的过渡。我的答案看起来更难,因为我必须以准确的方式指定组,这需要一些中间步骤。这是他对相同数据的情节:

enter image description here