开发者

Return call from ggplot object

开发者 https://www.devze.com 2022-12-29 06:16 出处:网络
I\'ve been using ggplot2 for a while now, and I can\'t find a way to get formula from ggplot object. Though I can get basic info with summary(<ggplot_object>), in order to get complete formula,

I've been using ggplot2 for a while now, and I can't find a way to get formula from ggplot object. Though I can get basic info with summary(<ggplot_object>), in order to get complete formula, usually I was combing up and down through .Rhistory file. And this becomes frustrating when you experiment with new graphs, especially when code gets a bit lengthy... so searching through history file isn't quite convenient way of doing this... Is there a more efficient way of doing this? Just an illustration:

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")

I can get some basic info with 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开发者_如何学C.. 
geom_text: vjust = -0.2 
stat_bin: width = 0.9, drop = TRUE, right = TRUE 
position_identity: (width = NULL, height = NULL)

But I want to get code I typed in to get the graph. I reckon that I'm missing something essential here... it's seems impossible that there's no way to get call from ggplot object!


It's not currently possible to go from a ggplot2 object to the code that (might have) created it.


You can store any R code as an expression with 'expression()' and then evaluate it with '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"))

then

eval(p)

will produce the plot but the original code is still stored in the variable 'p' as an expression.

so

p

produces

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"))

which is what we started with.

'eval()' can also evaluate a character string as an expression if parsed as text with parse(), e.g.

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号