我正在try 编辑gglot2对象中不同元素的大小,例如使点更大.我需要处理已构造的对象:即,给我一个ggplot2对象test_lot,我想要创建一个函数,使我能够zoom 点大小并返回new个ggplot2对象.我需要两个地块对象:原始地块(带有未zoom 元素)和新地块(带有zoom 元素).
然而,我在下面的try 似乎同时zoom 了原始和新的绘图--在多次调用时会导致递归zoom .我不太熟悉R.
我认为函数中的所有内容都是局部作用域,不会触及全局环境中的原始情节.
library(ggplot2)
test_plot = ggplot(mtcars) +
geom_point(aes(y = mpg, x = hp), col = "black")
adjust_point_size <- function(gg_plot,element_size_adjust = 1) {
build_data = ggplot_build(gg_plot)$data
point_size = unique(build_data[[1]]$size)
gg_plot$layers[[1]]$aes_params$size <- point_size*element_size_adjust
gg_plot
}
adjust_point_size(gg_plot = test_plot, element_size_adjust = 2) # ok
adjust_point_size(gg_plot = test_plot, element_size_adjust = 2) # why doubled
adjust_point_size(gg_plot = test_plot, element_size_adjust = 2) # why doubled again
test_plot # why different?
创建于2023-04-08年第reprex v2.0.2页
我try 将绘图对象作为新的临时对象保存在函数中,例如,test_plot2=test_plot,然后处理test_plot2.我没想到这会奏效(而且它也没有).
我使用的是ggplot2 v3.4.1.
谢谢!