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..
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!
With ggplot2, you begin a plot with the function ggplot() . ggplot() creates a coordinate system that you can add layers to.
You may notice that we sometimes reference 'ggplot2' and sometimes 'ggplot'. To clarify, 'ggplot2' is the name of the most recent version of the package. However, any time we call the function itself, it's just called 'ggplot'.
Base R plots two vectors as x and y axes and allows modifications to that representation of data whereas ggplot2 derives graphics directly from the dataset. This allows faster fine-tuning of visualizations of data rather than representations of data stitched together in the Base R package1.
Aesthetic Mapping ( aes ) In ggplot2 , aesthetic means “something you can see”. Each aesthetic is a mapping between a visual cue and a variable. Examples include: position (i.e., on the x and y axes) color (“outside” color)
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)')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With