如果我想改变 a 的字体大小,geom_text我可以使用该size参数。但是,如果我有一个ggplot由其他人生成的对象(例如在函数中)并且我想随后更改字体大小怎么办?(我可以重写该函数并允许使用额外的大小参数,但我想避免这种情况)。
我玩过theme(text = element_text(size = 20)),但这改变了每个文本,但是geom_text?我还尝试用新geom_text层替换相应层。但是,由于在外部函数调用中, 的数据参数已geom_text更改,因此我收到有关缺少美观性的错误。
代码
library(ggplot2)
functionICannotControl <- function() {
mdat <- mtcars
mdat$cyl2 <- LETTERS[mdat$cyl]
ggplot(mtcars, aes(x = hp, y = mpg)) + geom_text(aes(label = cyl2), data = mdat)
}
(bp <- functionICannotControl())
## changed only other text elements
bp + theme(text = element_text(size = 20))
## gives an error
bp2 <- bp
bp2$layers[[1]] <- geom_text(size = 20)
bp2
## Error: geom_text requires the following missing aesthetics: label
bp2$layers[[1]] <- geom_text(aes(label = cyl2), size = 20)
bp2
## Error in eval(expr, envir, enclos) : object 'cyl2' not found
Run Code Online (Sandbox Code Playgroud)
好的,我找到了解决方案(供参考,如果有人遇到同样的问题)。我们可以改变aes_params图层的槽位:
bp$layers[[1]]$aes_params
## named list()
bp$layers[[1]]$aes_params$size <- 20
bp
Run Code Online (Sandbox Code Playgroud)
注意,编写一个最小的工作示例确实有帮助,因为通过提出一个结构良好的问题,您可以了解有关您自己的问题的一些信息;)