ggplot中的控制点边框厚度


76

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

在此处输入图片说明

如何控制边框的厚度?

Answers:


102

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)

输出量


1
您可以添加输出吗?
托马斯

3
为了将来的兼容性和清晰度,最好说“从x.xx版本开始”,而不是“最新版本”。
格雷戈尔·托马斯

有没有一种基于变量来控制笔触粗细的方法?类似于“ scale_stroke_manual”?
Ricecakes'Sep

2
作为对我上面的评论的回应,我们可以使用scale_discrete_manual。在此处查看链接:github.com/tidyverse/ggplot2/issues/3507#issuecomment-526212978
Ricecakes'Sep

17

感觉有些古怪,但是您可以添加一组“背景”点,其大小设置为美观映射,再加上一些小常数以扩大点的边界。播放常数以获得所需的边框宽度。

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

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)

在此处输入图片说明


2
也许是hackey,但Hadl​​ey在Twitter上认可了这种方法
Noam Ross

1
@NoamRoss你有那个链接吗?
西蒙·奥汉隆

2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.