使用ggplot2创建的散点图中,如何改变颜色渐变?

3

是否可以通过美学来改变绘图的颜色渐变?我正在使用类似下面提供的代码生成一个图表,并发现在某些情况下很难区分各个组之间的差异。例如,在下面的图表中,如果我可以让A组点使用白蓝渐变,B组点使用白红渐变,那么区分结果将更容易。

data <- data.frame(x=c(1,2,3,4,5,6,1,2,3,4,5,6), 
    y=c(1,2,3,4,5,6,1,2,3,4,5,6), grp=c(rep("A",6),rep("B",6)),
    dt=c("2010-06-30","2010-05-31","2010-04-30",
      "2010-03-31","2010-02-26","2010-01-29","2010-06-30",
      "2010-05-31","2010-04-30",
      "2010-03-31","2010-02-26","2010-01-29"))
p <- ggplot(data, aes(x,y,color=as.integer(as.Date(data$dt)))) + 
    geom_jitter(size=4, alpha=0.75, aes(shape=grp)) + 
    scale_colour_gradient(limits=as.integer(as.Date(c("2010-01-29","2010-06-30"))),
    low="white", high="blue") +
    scale_shape_discrete(name="") +
    opts(legend.position="none")
print(p)

1
我认为你不能这样做,至少不容易。它只是无法映射到底层逻辑。 - Ista
添加一个图例可能会让事情变得更加混乱。 - hadley
1个回答

6

在调用ggplot2之前,您可以自己准备颜色。以下是一个例子:

data$sdt <- rescale(as.numeric(as.Date(data$dt)))  # data scaled [0, 1]
cols <- c("red", "blue") # colour of gradients for each group

# here the color for each value are calculated
data$col <- ddply(data, .(grp), function(x)
     data.frame(col=apply(colorRamp(c("white", cols[as.numeric(x$grp)[1]]))(x$sdt),
       1,function(x)rgb(x[1],x[2],x[3], max=255)))
       )$col

p <- ggplot(data, aes(x,y, shape=grp, colour=col)) +
  geom_jitter(size=4, alpha=0.75) + 
  scale_colour_identity() +  # use identity colour scale
  scale_shape_discrete(name="") +
  opts(legend.position="none")
print(p)

1
非常好用,谢谢。我花了一点时间才意识到grp列需要是一个因子,然后数据框需要按这些因子排序。 - user338714

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