最终目标是创建一个 Shiny 的应用程序,其中用户输入字符串以“panel.grid.minor = element_line(colour = 'red')”格式返回,并且更新了 ggplot 主题。因此,我尝试解析该字符串以更新主题。
这是原始情节:
library(ggplot2)
library(rlang)
theme_set(theme_dark())
ggplot(mpg, aes(displ, hwy, colour = class))+
geom_point()
在这个简化的示例中,我想动态地将次要网格线更改为红色。这是我到目前为止使用 parse_expr()
和 eval_tidy()
所得到的,但不起作用。任何帮助将不胜感激,谢谢!
library(ggplot2)
library(rlang)
theme_set(theme_dark())
x <- "panel.grid.minor = element_line(colour = 'red')"
theme_update(eval_tidy(parse_expr(x)))
ggplot(mpg, aes(displ, hwy, colour = class)) +
geom_point()
最佳答案
在 Twitter 的帮助下,我找到了解决方案!
单个参数(panel.grid.minor)
library(ggplot2)
library(rlang)
theme_set(theme_dark())
x <- "theme_update(panel.grid.minor = element_line(colour = 'red'))"
eval_tidy(parse_expr(x))
ggplot(mpg, aes(displ, hwy, colour = class)) +
geom_point()
多个参数(panel.grid.minor 和 panel.background)
library(ggplot2)
library(rlang)
theme_set(theme_dark())
x <- "theme_update(panel.grid.minor = element_line(colour = 'red'), panel.background = element_rect(fill = 'cyan'))"
eval_tidy(parse_expr(x))
ggplot(mpg, aes(displ, hwy, colour = class)) +
geom_point()
关于r - 将字符串解析为更新 ggplot theme() 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75947767/