R语言 将字符串解析为参数以更新ggplot主题()

aiazj4mn  于 2023-04-09  发布在  其他
关注(0)|答案(2)|浏览(94)

最终目标是创建一个闪亮的应用程序,其中用户输入字符串以“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()
v1l68za4

v1l68za41#

在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()
eufgjt7s

eufgjt7s2#

不使用rlang的一个稍微不同的选项是使用基本的evalparse选项,如下所示:

library(ggplot2)
theme_set(theme_dark())

x <- "theme_update(panel.grid.minor = element_line(colour = 'red'))"
eval(parse(text = x))
ggplot(mpg, aes(displ, hwy, colour = class)) +
  geom_point()

创建于2023-04-06带有reprex v2.0.2

相关问题