Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
277 views
in Technique[技术] by (71.8m points)

r - 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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...