在一个ggplot中使用两个不同的颜色渐变。

8
我想将散点图上的颜色刻度渐变和一些文本的颜色刻度渐变结合起来。 我可以分别完成它们,如下面我的示例所示,但似乎无法将它们放在一起...有没有一种方法可以实现这个目标?
以下是两种类型绘图(p和p1)的示例代码,我希望将它们合并。
l <- data.frame(prev=rnorm(1266), 
            aft=rnorm(1266), 
            day=as.factor(wday(sample(c(2:6),1266,replace=TRUE),abbr=TRUE, label=TRUE)), 
            month=as.factor(month(Sys.Date()+months(sample(0:11,1266,replace=TRUE)),abbr=TRUE, label=TRUE)), 
            ind=c(1:1266))
cors <- ddply(l, c("month", "day"), summarise, cor = round(cor(prev, aft), 3))


# below the text gains the colour gradient
p <- ggplot(l, aes(x=prev, y=aft)) + 
    geom_point() + 
    scale_colour_gradient(low = "red", high="blue")+ 
    facet_grid(day~month, scales="free_x")+
    geom_text(data=cors,aes(label=paste("r= ",cor,sep=""), size=abs(cor), colour=cor), x=Inf, y=Inf, vjust=1, hjust=1, show_guide=FALSE)+
    geom_hline(aes(yintercept=0))+
    geom_smooth(method="loess")
p

# below the points gain the colour gradient
p1 <- ggplot(l, aes(x=prev, y=aft)) + 
    geom_point(aes(colour=ind)) + 
    scale_colour_gradient("gray")+ 
    facet_grid(day~month, scales="free_x")+
    geom_text(data=cors,aes(label=paste("r= ",cor,sep=""), size=abs(cor), colour=cor), x=Inf, y=Inf, vjust=1, hjust=1, show_guide=FALSE)+
    geom_hline(aes(yintercept=0))+
    opts(legend.position="none") +
    geom_smooth(method="loess")

p1

3
FYI,一些人可能会觉得你在ggplot2邮件列表上也转帖了这篇内容有点烦人。同时向多个地方寻求帮助是可以的,但请先在一个地方提问,只有在合理的时间内没有得到答案时再去另一个论坛。请注意不要改变原文意思。 - joran
1个回答

3

我不认为这是可以实现的。一个图表每个审美特征只有一个比例尺。如果添加多个scale_color,第二个将覆盖第一个。我认为Hadley故意创建了这种行为,在一个图中,从数据到绘图范围内的映射(例如颜色)是唯一的。这确保了图中所有颜色都可以轻松比较,因为它们共享相同的scale_color


嗯,有趣的评论,谢谢。但是如果颜色比例完全不同,那么每个比例尺肯定可以代表不同的东西,尤其是如果一个与文本颜色相关,而另一个与点的颜色相关。 - h.l.m
1
@h.l.m 你需要知道的是,Hadley 的“官方”立场似乎并不完全反对多个比例尺的想法,但要实现与其他所有功能无缝协作的方式将会非常复杂,而这个功能的使用次数也是有限的。 - joran
为什么不使用 scale_alpha 来获取黑色的不同色度,例如灰色。 - mnel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接