ggplot gradientn基于指定形状的数据值填充

时间:2012-09-10 17:55:15

标签: r ggplot2

在ggplot2 example for scale_gradientn(第二张图片)中:

dsub <- subset(diamonds, x > 5 & x < 6 & y > 5 & y < 6) 
dsub$diff <- with(dsub, sqrt(abs(x-y))* sign(x-y)) 
(d <- qplot(x, y, data=dsub, colour=diff))

max_val <- max(abs(dsub$diff)) 
values <- seq(-max_val, max_val, length = 11) 
d + scale_colour_gradientn(colours = topo.colors(10), values = values, rescale = FALSE)

使用“形状”符号时,如何根据数据值填写,即:

(d <- qplot(x, y, data=dsub, fill=diff, colour="black", shape=21)) # Does not work

但是使用黑色边框和基于数据的填充而不是基于数据的边框颜色?

编辑:

建议的解决方案并不是很有效。我需要的是能够使用上面显示的示例使用shape = 21来获得相同的填充颜色,但是带有黑色边框,即:

dsub <- subset(diamonds, x > 5 & x < 6 & y > 5 & y < 6) 
dsub$diff <- with(dsub, sqrt(abs(x-y))* sign(x-y))
max_val <- max(abs(dsub$diff))
values <- seq(-max_val, max_val, length = 11)

ggplot(dsub) +
    geom_point(aes(x=x,y=y, data=dsub, colour=diff), size=3) +
    scale_colour_gradientn(colours = topo.colors(10), values = values, rescale = FALSE)

但使用shape = 21,以便有一个黑色边框,填充是相同的。这会为轮廓着色,而不是填充:

ggplot(dsub) +
    geom_point(aes(x=x,y=y, data=dsub, colour=diff), size=3, shape=21) +
    scale_colour_gradientn(colours = topo.colors(10), values = values, rescale = FALSE)

并且没有正确填写:

ggplot(dsub) +
geom_point(aes(x=x,y=y, data=dsub, fill=diff), size=3, shape=21) +
scale_colour_gradientn(colours = topo.colors(10), values = values, rescale = FALSE)

2 个答案:

答案 0 :(得分:1)

使用ggplot会是:

d<-ggplot(dsub,aes(x=x,y=y,group=diff,fill=diff))
d+geom_point(colour="black",size=3,shape=21)

enter image description here

修改

d<-ggplot(dsub,aes(x=x,y=y,group=diff,fill=diff))
e<- d + geom_point(colour="black",size=3,shape=21)
e + scale_fill_gradientn(colours=topo.colors(10))

enter image description here

还假装你在某个地方有另一层,例如geom_tile或您在评论中提到的内容,此处是一个带有额外geom_line图层的示例,我将其分解为单独的组件以明确说明:

d<-ggplot(dsub,aes(x=x,y=y,group=diff,fill=diff))
e<-d+geom_line()
g<- e + geom_point(colour="black",size=3,shape=21)
g + scale_fill_gradientn(colours=topo.colors(10))

答案 1 :(得分:0)

与user1317221_G显示的代码一样,解决方案是使用scale_fill_gradientn,而不是scale_color_gradientn

ggplot(dsub) +
    geom_point(aes(x=x,y=y,fill=diff), colour="black", size=3, shape=21) +
    scale_fill_gradientn(colours = topo.colors(10), values=values, rescale=FALSE)