控制点边框厚度在ggplot中

Noa*_*oss 71 r border point thickness ggplot2

当使用ggplot时,我可以设置shape为21-25来获取具有internal(fill)和border(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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,我无法弄清楚如何控制形状边框的厚度,无论是绝对设置还是美学映射.我注意到,如果我设置一个lwd值,它会覆盖size美学:

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

在此输入图像描述

如何控制边框厚度?

Noa*_*oss 77

ggplot2的 2.0.0版开始,有一个控制点边框厚度的参数.从NEWS.md文件:

geom_point()获得一个笔触美学,它控制形状21-25(#1133,@SeySayux)的边框宽度.尺寸和行程是相加的,因此尺寸= 5且行程= 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)
Run Code Online (Sandbox Code Playgroud)

产量

  • 为了将来的兼容性和清晰度,可以说"从版本x.xx开始"而不是"最新版本". (3认同)
  • 作为对我自己上面评论的回应,我们可以使用scale_discrete_manual。请参阅此处的链接:https://github.com/tidyverse/ggplot2/issues/3507#issuecomment-526212978 (2认同)

Sim*_*lon 16

感觉有点hacky但你可以添加一个" 背景 "点集,其大小设置为美学映射加上一些小常数来扩大点的边界.使用常量来获得所需的边框宽度.

您还必须禁用大小图例以停止在图表上显示图例...

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 也许hackey,但哈德利在Twitter上支持这种方法 (2认同)