90

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

在此处输入图像描述

如何控制边框厚度?

4

3 回答 3

126

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

输出

于 2015-12-18T18:23:31.043 回答
19

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

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

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)

在此处输入图像描述

于 2013-10-21T23:51:39.013 回答
1

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

于 2015-03-03T06:44:39.387 回答