ggplot中theme()设置被theme_grey()覆盖的问题求助
解决ggplot主题设置被覆盖的问题
为啥会出现这个问题?
ggplot的主题叠加规则是后加的会覆盖先加的,theme_gray()(或theme_grey())是一套完整的主题模板,加进去会重置包括legend.position在内的所有主题参数。你之前先加theme(legend.position = "bottom")再加theme_gray(),等于刚改完就被后者全重置了,自然没效果。
直接能用的解决办法
方法1:换个顺序就行
把完整主题theme_gray()放在前面,再用theme()改你需要的特定参数,这样自定义的设置会覆盖主题模板里的对应项:
ggplot() + theme_gray(base_size = 7) + theme(legend.position = "bottom")
方法2:提前组合好主题(适合重复用)
如果要多次用这个符合期刊要求的主题,先把theme_gray()和自定义参数组合起来,再设为全局默认:
# 先拼好自己的专属主题 my_journal_theme <- theme_gray(base_size = 7) + theme(legend.position = "bottom") # 设置成全局默认,之后所有ggplot图都会自动用这个主题 theme_set(my_journal_theme) # 举个例子,直接画图就生效 ggplot(mtcars, aes(wt, mpg)) + geom_point()
方法3:一次加多个自定义参数(灵活调整)
如果还要改其他参数(比如标题居中、坐标轴文字角度),直接在theme_gray()后面链式加theme()就行:
ggplot(mtcars, aes(wt, mpg)) + geom_point() + theme_gray(base_size = 7) + theme( legend.position = "bottom", plot.title = element_text(hjust = 0.5), axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1) )
为啥之前用theme_set()没效果?
你之前用theme_set()无效,应该是顺序错了——比如先设theme_set(theme(legend.position = "bottom")),再去加theme_gray(),后者还是会覆盖全局主题。正确操作是把完整主题和自定义参数组合好,再传给theme_set(),就像方法2那样。
内容的提问来源于stack exchange,提问作者Chong Kai
相关产品推荐
相关产品推荐

