控制点边框厚度在ggplot中

时间:2013-10-21 23:37:44

标签: r ggplot2 border point thickness

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

enter image description here

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

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

enter image description here

如何控制边框厚度?

3 个答案:

答案 0 :(得分:63)

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)

Output

答案 1 :(得分:14)

感觉有点hacky但是你可以添加一个“ 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)

enter image description here

答案 2 :(得分:2)

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