【问题标题】:R ggplot2: Plot geom_point with black and white without using shape?R ggplot2:用黑白绘制geom_point而不使用形状?
【发布时间】:2020-07-08 03:45:24
【问题描述】:

我想用 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"))

剧情是这样的。

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

【问题讨论】:

  • 您仍然可以使用颜色,但将 0 设为浅灰色和 1 设为黑色,在黑白模式下仍然可以很好地打印/显示
  • @bouncyball 谢谢;如果没有其他解决方案,我想我将不得不这样绘制。

标签: r ggplot2


【解决方案1】:

如果您想像示例中那样为这两个因素提供两个单独的图例,您可以使用“可填充”形状和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" ) ) )

【讨论】:

  • 谢谢!效果很好。我特别喜欢额外的传奇指南,没有它就不会工作。干杯。
【解决方案2】:

这里有一个解决方案:

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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多