如何将字符串作为代码添加到ggplot对象中

时间:2017-03-03 11:59:04

标签: r string ggplot2

我的ggplot代码的一部分存储在一个字符向量中。我想使用此代码作为我的ggplot的额外geoms。

示例1:

  DF=data.frame(x=seq(1:10), y=seq(1:20))
   a='geom_line()'# This is a string that should be converted to RCode

到目前为止,我试过了:

ggplot(DF, aes(x,y))+geom_point()+a
Error: Don't know how to add a to a plot

ggplot(DF, aes(x,y))+geom_point()+as.name(a)
Error: Don't know how to add as.name(a) to a plot

ggplot(DF, aes(x,y))+geom_point()+eval(parse(text=a))
Error in geom_line() + geom_line(y = 1) : 
non-numeric argument to binary operator

ggplot(DF, aes(x,y))+geom_point()+deparse(substitute(a))
Error: Don't know how to add deparse(substitute(a)) to a plot

示例2:

DF=data.frame(x=seq(1:10), y=seq(1:20))
a='geom_line()+geom_line(y=1)'

可能你在想,为什么我想首先做到这一点?在for循环中,我创建了表达式并将它们作为字符存储在列表中。后来,我将所有表达式粘贴到一个字符串表达式中。现在,我想将此字符串添加到ggplot命令中。有什么建议吗?

编辑:示例1已成功解决。但是示例2仍未解决。

2 个答案:

答案 0 :(得分:2)

CREATE EXTENSION pg_cron; 函数需要将parse传递给的文本参数。尝试:

a

更多信息: http://adv-r.had.co.nz/Expressions.html#parsing-and-deparsing

在多个语句的情况下,可以解析原始表达式,添加新表达式然后作为一个整体进行评估

ggplot(DF, aes(x,y)) + geom_point() + eval(parse(text = a))

答案 1 :(得分:0)

您也可以使用函数将这些代码定义为一个列表。请参阅:https://homepage.divms.uiowa.edu/~luke/classes/STAT4580/dry.html

这里我引用了相关代码:

<块引用>

定义一个 theme_slopegraph 函数来做主题调整允许 易于重复使用的调整:

theme_slopechart = function(toplabels = TRUE) {
     thm <- theme(...)
list(thm, ...) # add multiple codes
#...
}

p <- basic_barley_slopes ## from twonum.R
p + theme_slopechart()