【问题标题】:Control point border thickness in ggplotggplot中的控制点边框厚度
【发布时间】:2013-10-30 15:50:21
【问题描述】:

使用 ggplot 时,我可以将 shape 设置为 21-25 以获得具有独立设置内部 (fill) 和边框 (col) 颜色的形状,如下所示:

df <- data.frame(id=runif(12), x=1:12, y=runif(12))
ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21)

但是,我不知道如何控制形状边框的粗细,无论是绝对设置还是作为美学映射。我注意到,如果我设置 lwd 值,它会覆盖 size 美学:

ggplot(df, aes(x=x, y=y)) + 
  geom_point(aes(fill=id, size=id), colour="black", shape=21, lwd=2)

如何控制边框粗细?

【问题讨论】:

    标签: r ggplot2 border point thickness


    【解决方案1】:

    ggplot2 2.0.0 版本开始,有一个控制点边框粗细的参数。来自NEWS.md 文件:

    geom_point() 获得了一种控制形状 21-25 边框宽度的笔触美感(#1133,@SeySayux)。 size 和 stroke 是相加的,因此 size = 5 和 stroke = 5 的点的直径为 10mm。 (#1142)

    因此,现在的正确解决方案是:

    df <- data.frame(id=runif(12), x=1:12, y=runif(12))
    ggplot(df, aes(x=x, y=y)) + 
      geom_point(aes(fill=id, size=id), colour="black", shape=21, stroke = 2)
    

    【讨论】:

    • 可以添加输出吗?
    • 为了将来的兼容性和清晰度,最好说“从版本 x.xx 开始”而不是“最新版本”。
    • 有没有办法根据变量来控制笔画的粗细?类似于“scale_stroke_manual”的东西?
    • 作为对我上面自己评论的回应,我们可以使用 scale_discrete_manual。请参阅此处的链接:github.com/tidyverse/ggplot2/issues/3507#issuecomment-526212978
    • 有什么想法为什么 stroke=0 仍然在 PDF 中绘制它而不是在 PNG 中?
    【解决方案2】:

    感觉有点老套,但您可以添加一组“background”点,其大小设置为美学映射,再加上一些小常数来放大点。使用常量来获得所需的边框宽度。

    您还必须禁用尺寸图例以停止它在图表上显示图例...

    ggplot(df, aes(x=x, y=y)) + 
      geom_point(aes(size=id+0.5), colour="black" , show_guide = FALSE )+
      scale_size( guide = "none" )+
      geom_point(aes(fill=id, size=id), colour="black", shape=21)
    

    【讨论】:

    • 可能是 hackey,但 Hadley 在 Twitter 上支持这种方法
    • @NoamRoss 你有那个链接吗?
    【解决方案3】:

    另一种解决方案是在 R 中创建绘图,然后将其导出到 .svg 文件。然后可以使用矢量图形编辑软件(例如 Inkscape)更改线宽。这种方法在数据点重叠时特别有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      相关资源
      最近更新 更多