指定组会导致丑陋的geom_line

时间:2015-07-08 12:30:54

标签: r ggplot2

我正在根据两个规格限制之间的值绘制两种不同颜色的移动平均线。当我使用一种颜色时,这种方法很好,但是当我使用两种颜色时,这会导致阻塞线。

数据:

df <- data.frame(x=c(154,154.87,154.87,155,156,157,158,159,159.65,159.65,160,161,162,163,164,165,166,167,168,169,170),
             y=c(-3.924,-9,-9,-9.73,-16.922,-18.066,-12.788,-13.676,-9,-9,-6.496,-2.458,0.696,3.406,4.458,-1.292,0.728,-1.962,-5.372,-7.408,-1.882),
             col=factor(c(3,3,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3)))

现在使用一种颜色绘制,没有group = 1选项可以在各段之间进行平滑过渡:

gg <- ggplot(df,aes(x=x,y=y))
gg <- gg + geom_line(color="blue",size=3)
gg <- gg + geom_hline(yintercept=c(-9,9),size=2)
gg

但是,当引入group = 1(和color = col)时,转换不再平滑:

gg <- ggplot(df,aes(x=x,y=y,color=col,group=1))
gg <- gg + geom_line(size=3)
gg <- gg + geom_hline(yintercept=c(-9,9),size=2)
gg

我做错了什么或如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为你不一定做错了,但似乎ggplot无法处理属于具有多种颜色的一个组(group = 1)的行。因此,似乎有一些转换为线段,允许按组颜色。

我能想出的最快的解决方案是按颜色分组,并使水平线与绘制线的尺寸相同(因此它们绘制在线的水平部分上):

gg <- ggplot(df,aes(x=x,y=y,colour=col, group=col))
gg <- gg + geom_line(size=3)
gg <- gg + geom_hline(yintercept=c(-9,9),size=3)
gg

enter image description here

编辑:如果行大小是一个问题(美学与否),您可以根据数据中的运行添加一个分组变量,其偏移量较小(未绘制偏移量)

df_runs <- rle(as.numeric(df$col))


#make group based on run lengths
df$group <- rep(1:length(df_runs$lengths),df_runs$lengths)

gg <- ggplot(df,aes(x=x,y=y,colour=col, group=group))
gg <- gg + geom_line(size=3)
gg <- gg + geom_hline(yintercept=c(-9,9),size=1)
gg

enter image description here