【问题标题】:Filled and hollow shapes where the fill color = the line color填充颜​​色 = 线条颜色的填充和空心形状
【发布时间】:2014-10-27 05:47:22
【问题描述】:

我想在点图中传达三种类型的信息。我可以使用颜色、形状和填充(我的实际数据有太多点无法有效使用大小)。但是如果填充颜色与轮廓颜色相同会更好看。

我能得到的最接近的是:

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

它将黑色填充到所有轮廓颜色中,丑陋。关于如何用红色填充红色点和用蓝色填充蓝色点的任何想法?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    引入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
    

    生产:


    编辑:为了解决弗利克先生的问题,我们可以作弊并添加图层/alpha。请注意,我们需要添加一个图层,因为据我所知,无法独立控制颜色和填充的 alpha:

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

    【讨论】:

    • 聪明。但是要为vs 值添加一个图例来指示哪些是填充的,哪些是空的,这并不容易,是吗?目前尚不清楚填充的和空的有什么区别。
    • 另一个聪明的解决方案/解决方法。很遗憾,我只能投一票。
    • 这两种解决方案都非常聪明。谢谢!我必须承认,很难理解它们是如何工作的。在第二个解决方案中,使用比例,为什么美学必须在 ggplot 调用和 geom_point() 调用之间分开?为什么没有第二个 geom_point(size=10) 的开放形状会消失?
    • 我的错,回答我自己的问题。 ggplot 的主要调用是赋予所有美学,除了强硬的“填充”。由 geom_point 创建的第一层是填充点,但开放点在 alpha=0 时被绘制为不可见。第二层,由第二次调用 geom_point 创建,只绘制空心形状,包括重新勾勒填充的形状。更酷的是,图层是按顺序添加的,因此如果两个 geom_point() 调用相反,实体会覆盖开放的形状。
    • @PeterK,没错。此外,第一个有效,因为我们将每个vs==1 点的填充值设置为NA。这会产生深灰色,但如果我们手动指定 NA 颜色应为 NA 而不是默认颜色,则“颜色”将变为透明(这就是 NA 的解释方式)。
    猜你喜欢
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多