如何在ggplot中设置geom_line默认尺寸?update_geom_defaults失效排查
问题:
update_geom_defaults修改geom_line默认线条粗细无效? 尝试用update_geom_defaults设置geom_line的默认size=2,但生成的图表线条尺寸仍为1,修改默认颜色却能成功,示例代码如下:
library(tidyverse) update_geom_defaults("line", list(size = 2)) data(ChickWeight) ChickWeight %>% filter(Chick %in% c("1", "2", "3")) %>% ggplot(aes(x = Time, y = weight, colour = Chick)) + geom_line()
原因分析
geom_line的默认线条粗细默认继承自ggplot2全局主题的line.size(默认值为1)。update_geom_defaults用于设置几何对象的默认参数,但如果主题的line.size优先级更高,或者操作顺序有误(比如先设置geom默认值再加载主题),就会导致设置不生效。
解决办法
方法1:修改全局主题的线条尺寸
此方法会影响所有线条类元素(包括坐标轴、网格线等):
library(tidyverse) # 更新全局主题的线条尺寸 theme_update(line.size = 2) data(ChickWeight) ChickWeight %>% filter(Chick %in% c("1", "2", "3")) %>% ggplot(aes(x = Time, y = weight, colour = Chick)) + geom_line()
方法2:确保update_geom_defaults在主题设置之后执行
如果使用了自定义主题,需要先设置主题,再更新geom的默认参数,避免主题覆盖geom的设置:
library(tidyverse) # 先设置自定义主题(以theme_minimal为例) theme_set(theme_minimal()) # 再更新geom_line的默认size update_geom_defaults("line", list(size = 2)) data(ChickWeight) ChickWeight %>% filter(Chick %in% c("1", "2", "3")) %>% ggplot(aes(x = Time, y = weight, colour = Chick)) + geom_line()
方法3:直接在geom_line中指定默认值(临时方案)
如果只需要在当前图表生效,可以直接在geom_line里设置size参数:
library(tidyverse) data(ChickWeight) ChickWeight %>% filter(Chick %in% c("1", "2", "3")) %>% ggplot(aes(x = Time, y = weight, colour = Chick)) + geom_line(size = 2)
内容的提问来源于stack exchange,提问作者Tom Wagstaff
相关产品推荐
相关产品推荐

