从ggplot对象返回调用

时间:2010-05-04 11:20:32

标签: r ggplot2

我一直在使用ggplot2一段时间了,我找不到从ggplot对象获取公式的方法。虽然我可以使用summary(<ggplot_object>)获取基本信息,但为了获得完整的公式,通常我会在.Rhistory文件中进行梳理。当你尝试使用新的图形时,这会变得令人沮丧,特别是当代码变得有点冗长时......所以搜索历史文件并不是很方便的方法......有没有更有效的方法呢?只是一个例子:

p <- qplot(data = mtcars, x = factor(cyl), geom = "bar", fill = factor(cyl)) + 
     scale_fill_manual(name = "Cylinders", value = c("firebrick3", "gold2", "chartreuse3")) + 
     stat_bin(aes(label = ..count..), vjust = -0.2, geom = "text", position = "identity") + 
     xlab("# of cylinders") + ylab("Frequency") + 
     opts(title = "Barplot: # of cylinders")

我可以通过summary获得一些基本信息:

> summary(p)
data: mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb [32x11]
mapping:  fill = factor(cyl), x = factor(cyl)
scales:   fill 
faceting: facet_grid(. ~ ., FALSE)
-----------------------------------
geom_bar:  
stat_bin:  
position_stack: (width = NULL, height = NULL)

mapping: label = ..count.. 
geom_text: vjust = -0.2 
stat_bin: width = 0.9, drop = TRUE, right = TRUE 
position_identity: (width = NULL, height = NULL)

但是我想获得我输入的代码来获取图表。我估计我在这里缺少必要的东西......似乎不可能从ggplot对象接到电话!

2 个答案:

答案 0 :(得分:4)

目前无法从ggplot2对象转到(可能)创建它的代码。

答案 1 :(得分:3)

您可以将任何R代码存储为带有'expression()'的表达式,然后使用'eval()'进行评估。 e.g。

p <- expression(qplot(data = mtcars, x = factor(cyl), geom = "bar", fill = factor(cyl)) + 
     scale_fill_manual(name = "Cylinders", value = c("firebrick3", "gold2", "chartreuse3")) + 
     stat_bin(aes(label = ..count..), vjust = -0.2, geom = "text", position = "identity") + 
     xlab("# of cylinders") + ylab("Frequency") + 
     opts(title = "Barplot: # of cylinders"))

然后

eval(p)

将生成图,但原始代码仍作为表达式存储在变量“p”中。

所以

p

产生

expression(qplot(data = mtcars, x = factor(cyl), geom = "bar", 
    fill = factor(cyl)) + scale_fill_manual(name = "Cylinders", 
    value = c("firebrick3", "gold2", "chartreuse3")) + stat_bin(aes(label = ..count..), 
    vjust = -0.2, geom = "text", position = "identity") + xlab("# of cylinders") + 
    ylab("Frequency") + opts(title = "Barplot: # of cylinders"))

这是我们开始的。

如果使用parse()解析为文本,那么

'eval()'也可以将字符串计算为表达式,例如

eval(parse(text='f(arg=value)')