R ggplot2:使用黑色和白色绘制geom_point而不使用形状?

时间:2017-06-26 18:07:39

标签: r ggplot2

我想用ggplot2绘制黑白图,但我不想使用形状(即纯黑色与开放黑色轮廓),因为我需要形状来描述另一组。

library(ggplot2)
str(mtcars)
p <- ggplot(data = mtcars, aes(x = wt, y=mpg, col=factor (vs), shape= factor (cyl) ))
p + geom_point(size=10) +

theme_bw() +
  theme(legend.position="bottom", legend.title=element_blank(), legend.key = element_blank(),
        axis.text.x = element_text(size=17),
        axis.text.y = element_text(size=17),
        axis.title.x = element_text(size=20),
        axis.title.y     = element_text(size=20), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.background = element_blank(), 
        legend.text      =element_text(size=22)
  ) + 
  scale_colour_manual(values = c("red", "blue"))

情节看起来像这样。 enter image description here

我想将0和1绘制成黑色和白色(黑色轮廓)但是在这种情况下很难,因为形状已经采用因子(vs)。还有什么我可以做的吗?谢谢。

2 个答案:

答案 0 :(得分:3)

如果您希望在示例中使用两个单独的图例,则可以使用“可填充”形状和fill美学而不是color美学。形状显示为here;可填写的那些是黄色的,21-25。

要让您的图例看起来如何,尤其是fill图例,您可以通过override.aes中的guide_legend覆盖形状。在这里,我还用黑色填充shape传奇,但如果你不介意白色传说,那就没有必要了。

ggplot(data = mtcars, aes(x = wt, y=mpg, fill = factor(vs), shape= factor (cyl) 
)) + 
     geom_point(size=10) +
     theme_bw() +
     scale_fill_manual(values = c("black", "white")) +
     scale_shape_manual(values = c(21, 24, 22) ) +
     guides(fill = guide_legend(override.aes = list(shape = 21) ),
            shape = guide_legend(override.aes = list(fill = "black" ) ) )

enter image description here

答案 1 :(得分:0)

这是一个解决方案:

str(mtcars)
p <- ggplot(data = mtcars, aes(x = wt, y=mpg, shape=paste0(vs,cyl) ))
p + geom_point(size=10) +

    theme_bw() +
    theme(legend.position="bottom", legend.title=element_blank(), legend.key = element_blank(),
          axis.text.x = element_text(size=17),
          axis.text.y = element_text(size=17),
          axis.title.x = element_text(size=20),
          axis.title.y     = element_text(size=20), 
          panel.grid.major = element_blank(), 
          panel.grid.minor = element_blank(),
          panel.background = element_blank(), 
          legend.text      =element_text(size=22)
    )+scale_shape_manual(values = c("04"=15,"06"=16,"08"=17,"14"=0,"16"=1,"18"=2))