modifying ggplot objects after creation
Is there a preferred way to modify ggplot
objects after creation?
For example I recommend my students to save the r object together with the pdf file for later changes...
library(ggplot2)
graph <-
ggplot(mtcars, aes(x=mpg, y=qsec, fill=cyl)) +
geom_point() +
geom_text(aes(label=rownames(mtcars))) +
xlab('miles per galon') +
ggtitle('my title')
ggsave('test.pdf', graph)
save(graph, file='graph.RData')
So new, in case they have to change title or labels or sometimes other things, they can easily load the object and change simple things.
load('graph.RData')
print(graph)
graph +
ggtitle('better title') +
ylab('seconds per quarter mile')
What do I have to do for example to change the colour to discrete scale? In the original plot I would wrap the y
in as.factor
. But is there a way to do it afterwards?
Or is there a better way on modifying the objects, when the data is gone
. Would love to get some advice.
Solution 1:
You could use ggplot_build()
to alter the plot without the code or data:
Example plot:
data("iris")
p <- ggplot(iris) +
aes(x = Sepal.Length, y = Sepal.Width, colour = Species) +
geom_point()
Colours are respective to Species
.
Disassemble the plot using ggplot_build()
:
q <- ggplot_build(p)
Take a look at the object q
to see what is happening here.
To change the colour of the point, you can alter the respective table in q
:
q$data[[1]]$colour <- "black"
Reassemble the plot using ggplot_gtable()
:
q <- ggplot_gtable(q)
And plot it:
plot(q)
Now, the points are black.