我一直在使用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
对象接到电话!
答案 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)')