Control point border thickness in ggplot

試著忘記壹切 提交于 2019-11-26 09:35:09

问题


When using ggplot, I can set shape to 21-25 to get shapes that have independent setting for the internal (fill) and border (col) colors, like so:

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

However, I can\'t figure out how to control the thickness of the shape borders, either setting them absolutely or as an aesthetic mapping. I note that if I set an lwd value, it overrides the size aesthetic:

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

\"enter

How do I control the border thickness?


回答1:


Starting in version 2.0.0 of ggplot2, there is an argument to control point border thickness. From the NEWS.md file:

geom_point() gains a stroke aesthetic which controls the border width of shapes 21-25 (#1133, @SeySayux). size and stroke are additive so a point with size = 5 and stroke = 5 will have a diameter of 10mm. (#1142)

Thus, the correct solution to this is now:

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)




回答2:


It feels a bit hacky but you can add a "background" set of dots with the size set to the aesthetic mapping plus some small constant to enlarge the border of the dots. Play with the constant to get the desired border width.

You'll also have to disable the size legend to stop it displaying the legend on the graph...

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)




回答3:


Another solution is to create the plot in R and then export it to a .svg file. The linewidth can then be changed using vector graphics editing software (e.g., Inkscape). This method is particularly useful when data points overlap.



来源:https://stackoverflow.com/questions/19506630/control-point-border-thickness-in-ggplot

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!