
ggplot 中的字体大小、圆点大小和线条粗细探究
ggplot,R 中的可视化神器。ggplot 的出图美观漂亮、简约大气,自定义程度极高,图中的所有元素均可以修改,没错,是所有元素。
但是在使用过程中,有个问题一直困扰着我,输出的图分辨率多大合适?字体多大比较合适?还有一点比较疑惑的,ggplot 里面的字体大小不知道用的什么单位,px?pt?或者是其他?好像还存在着某种换算关系,比如设置 size=20,输出 PDF 查看字体大小并不是 20 磅,要大一些。
问题描述
画个图,字体:20,横线宽度:3,点大小:3
1 | ggplot(women, aes(height,y=weight))+geom_point()+ |
用 Ai 打开看字体大小和线条粗细
字体:57pt,线条描边:6.4pt,点:7.11pt + 0.71pt/2 = 7.465pt(总大小),跟设置值好像毫无关联啊……
再看官网对 element_blank() element_rect() element_line() element_text() 的 size 参数的描述
size
Line/border size in mm; text size in pts.
线/描边单位是毫米,文本是点
试一下看看,把坐标轴文本大小设置为 20
1 | ggplot(women, aes(height,y=weight))+geom_point()+ |
Ai 里面显示文本确实是 20pt,看来在 ggplot 中单位并不都是 pt,不使用 element_xxx() 类型设置的元素存在一个换算关系。
解决方法
文本和线宽
简书上有一个帖子的方法挺有用的,简单来说就是不用 element_xxx() 设置元素时,size 参数都要除以某个比例才能转换成熟悉的 pt。
1 | ggplot2::.pt |
文本的 size 参数要 ÷ f.pt,线的 size 参数要 ÷ l.pt,就可以把各种大小都换算成 pt 单位了。
1 | ggplot(women, aes(height,y=weight))+geom_point()+ |
非常完美!
点
关于点的大小,比较复杂,因为点有不同的形状,通过 shape 参数控制。

形状 21-24 含有描边,这时候点的大小由两个参数控制, size 参数控制填充大小,stroke 参数控制描边大小,单位均为毫米。

输出 PDF 大小
具体还是要根据期刊的要求来,毕业论文里面我的设置是图 10cm×8cm 左右,文字大小 9pt 左右,线宽 0.75pt 左右,打印出来清晰美观,比较合适。
代码如下:
1 | mytheme <- theme(axis.title = element_text(size = 9), |
绘图的时候直接 +mytheme 就可以了。
最后贴一张效果图
参考
Aesthetic specifications • ggplot2 (tidyverse.org)
R语言学习笔记 – ggplot2 绘图指定字体大小与线宽 - 简书 (jianshu.com)
5.3 Using Different Point Shapes | R Graphics Cookbook, 2nd edition (r-graphics.org)


