2014-09-02 172 views
11

我想在点图中传达三种类型的信息。我可以使用颜色,形状和填充(我的实际数据有太多的点来有效地使用尺寸)。但是如果填充颜色与轮廓颜色相同,看起来效果最好。填充颜色和线条颜色的填充和空心形状

我能得到的最接近的是这样的:

data(mtcars) 
p <- ggplot(mtcars,aes(x=mpg,y=wt))+ 
    geom_point(aes(color=factor(cyl),shape=factor(gear),fill=factor(vs)))+ 
    scale_fill_manual(values=c("black",NA))+scale_shape_manual(values=c(21,22,23)) 

enter image description here

填充黑色到所有的外框颜色,难看。有关如何用红色和蓝色填充红点的想法?

回答

17

介绍NA,并与scale_fill_discrete映射那些在NA颜色:

ggplot(mtcars,aes(x=mpg,y=wt)) + 
    geom_point(size=10, 
    aes(
     color=factor(cyl), 
     shape=factor(gear), 
     fill=factor(ifelse(vs, NA, cyl))   # <---- NOTE THIS 
)) + 
    scale_shape_manual(values=c(21,22,23)) + 
    scale_fill_discrete(na.value=NA, guide="none") # <---- NOTE THIS 

产地:

enter image description here


编辑:为了解决弗里克先生,我们可以欺骗,并添加图层/阿尔法。请注意,我们需要添加一个图层因为据我所知是没有办法独立控制阿尔法颜色和填充:

library(ggplot2) 
ggplot(mtcars,aes(x=mpg,y=wt, color=factor(cyl), shape=factor(gear))) + 
    geom_point(size=10, aes(fill=factor(cyl), alpha=as.character(vs))) + 
    geom_point(size=10) +  
    scale_shape_manual(values=c(21,22,23)) + 
    scale_alpha_manual(values=c("1"=0, "0"=1)) 

enter image description here

+1

聪明。但是为'vs'值添加一个图例并不容易,它指出哪些是填充的,哪些是空的,是吗?目前还不清楚填充和空白区别是什么。 – MrFlick 2014-09-02 21:30:02

+1

@MrFlick,公正的批评。查看更新。 – BrodieG 2014-09-02 22:10:58

+1

另一个聪明的解决方案/解决方法。我很遗憾,我只有一个投票权。 – MrFlick 2014-09-02 22:31:17