在一个ggplot上使用两个刻度颜色渐变

时间:2012-08-01 04:51:24

标签: r colors ggplot2 scale gradient

我想将散点图上的点的颜色比例渐变与图表上某些文本的颜色比例渐变结合起来。我可以单独执行它们,如下面的示例所示,但我似乎无法将它们放在一起......有没有办法做到这一点?

这是我要组合的两种类型图(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

1 个答案:

答案 0 :(得分:3)

我不希望这样做。情节每个美学只有一个尺度。我相信如果你添加多个scale_color,第二个将覆盖第一个。我认为Hadley故意创建了这种行为,在一个图中,从数据到图中的比例的映射,例如,颜色,是独一无二的。这可以确保可以轻松比较绘图中的所有颜色,因为它们共享相同的scale_color

相关问题