如果我想更改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
答案 0 :(得分:2)
好的,我找到了解决方案(以供参考,如果有人遇到同样的问题)。我们可以更改图层的aes_params
位置:
bp$layers[[1]]$aes_params
## named list()
bp$layers[[1]]$aes_params$size <- 20
bp
N.B。它有助于编写一个最小的工作示例,因为通过提出结构良好的问题,您可以了解自己的问题;)