创建后修改ggplot对象

drm*_*iod 8 r ggplot2

是否有一种ggplot在创建后修改对象的首选方法?

例如,我建议我的学生将r对象与pdf文件一起保存以供以后更改...

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')
Run Code Online (Sandbox Code Playgroud)

如此新的,如果他们必须更改标题或标签或有时其他东西,他们可以轻松加载对象并更改简单的事情.

load('graph.RData')
print(graph)
graph + 
  ggtitle('better title') +
  ylab('seconds per quarter mile')
Run Code Online (Sandbox Code Playgroud)

例如,我需要做什么才能将颜色更改为离散比例?在原来的情节我会包裹yas.factor.但之后有办法吗?或者,当数据存在时,是否有更好的方法来修改对象gone.很想得到一些建议.

小智 23

您可以使用ggplot_build()在没有代码或数据的情况下更改绘图:

示例图:

data("iris")

p <- ggplot(iris) + 
  aes(x = Sepal.Length, y = Sepal.Width, colour = Species) + 
  geom_point()
Run Code Online (Sandbox Code Playgroud)

颜色分别对应Species.

使用ggplot_build()以下方法拆卸绘图:

q <- ggplot_build(p)
Run Code Online (Sandbox Code Playgroud)

看看对象q,看看这里发生了什么.要更改点的颜色,可以在以下位置更改相应的表q:

q$data[[1]]$colour <- "black"
Run Code Online (Sandbox Code Playgroud)

使用ggplot_gtable()以下方法重新组装绘图:

q <- ggplot_gtable(q)
Run Code Online (Sandbox Code Playgroud)

并绘制它:

plot(q)
Run Code Online (Sandbox Code Playgroud)

现在,积分是黑色的.

  • @jntrcs 目前您可以执行以下操作: `q = ggplot_build(ggplot_plot)` `q$data[[1]]$size = 0.2` `q = ggplot_gtable(q)` `ggsave(filename,plot=q)` 来保存编辑过的情节。(只是指出这一点,因为两年内没有人这样做) (5认同)
  • 这是一个非常有用的答案。但是,您知道如何将 q 转回与原始 ggplot.txt 相同的对象吗?目前,这与 +ggsave() 和 +ggtitle() 等内容不兼容,将其添加到 q 中会非常好 (3认同)