在ggplot2中使用不同的调色板进行过度绘图

时间:2013-02-07 17:37:02

标签: r ggplot2

亲爱的堆栈溢出读者,

我有一个数据集,我有“原始”数据,我还为此计算了某种平滑功能。然后我想将原始数据绘制为点,并将平滑绘制为线。这适用于以下内容:

Loc <- seq(from=1,to=50)
Loc <- append(Loc,Loc)
x <- seq(from=0,to=45,by=0.01)
Val <- sample(x,100)
labels <- NULL
labels[1:50] <- 'one'
labels[51:100] <- 'two'

x2 <- seq(from=12,to=32,by=0.01)
Val2 <- sample(x2,100)
raw <- data.frame(loc=Loc,value=Val,lab=labels)
smooth <- data.frame(loc=Loc,value=Val2,lab=labels)

pl <- ggplot(raw,aes(loc,value,colour=lab)) + geom_point() + geom_line(data=smooth)
print(pl)

结果如下:

enter image description here

问题是我的实际数据包含很多数据点,使用相同的调色板会非常混乱(点和线之间的差异几乎无法区分)。最好是,我会使geom_lines()稍微变暗。我尝试使用scale_colour_hue(l=40),但这会导致geom_points()更暗。

感谢您的任何建议!

2 个答案:

答案 0 :(得分:2)

我没有一个完美的答案,但我确实有一个有效的答案。您可以通过将线条分割为单独的几何图形来单独控制线条的颜色,如下所示:

ggplot(raw,aes(loc,value)) + 
geom_point(aes(col=lab)) + 
geom_line(data=smooth[smooth$lab=="one",], colour="blue", size=1) + 
geom_line(data=smooth[smooth$lab=="two",], colour="black", size=1)

chart 1

这样做的缺点是您必须手动指定行选择,但优点是您可以手动指定每行的可视属性。

另一种选择是使用相同的调色板,但要使线条更大且部分透明,如下所示:

ggplot(raw,aes(loc,value,colour=lab)) + 
geom_point() + 
geom_line(data=smooth, size=2, alpha=0.5)

chart 2

您应该可以根据自己的需要自定义内容。

答案 1 :(得分:1)

您可以尝试通过在alpha=中设置geom_point()值来使点更亮,而不是使线条更暗。

pl <- ggplot(raw,aes(loc,value,colour=lab)) + geom_point(alpha=0.5) + 
      geom_line(data=smooth)
print(pl)

enter image description here