add geom sub-parts to ggplot after geom has been previously added



Hi everyone,

I am writing a shiny app and a part of it allows users to draw plots with with a variety of customized elements. The logic I am designing this plotting function is writing a bunch of if statements go like this,

p = ggplot(data)
  p = p + geom_x
  p = p + lable(x)

however, there is a problem int his design. Say we are in one if statement where we are asked to adjust the point size of a geom_point plot and the ggplot object generated from the previous if statements is this

p = ggplot(data) + geom_point(...) + geom_text(...)

My tentative solution is

to do

p + aes(size = selected size)

but how do I make sure this aes(size) goes to geom_point instead of geom_text?

This form problem could be further generalized to how can I add an element to geom_x after the geom_x was already added to the plot?

Thank you!


From a ggplot-perspective, you would do this by putting the fixed aesthetic value inside of `geom_point(), e.g.

geom_point(colour = "red", size = 3)

so, given that, you would want to essentially regenerate the geom_point(...) part of the plot.

There are a few ggplot extensions that allow for interactive editing of plots. The source code for those extensions might be a helpful place to look (even though I think these two are add-ins):

Otherwise, you might consider moving this to #shiny, since I think this might be more about the logic of your shiny app than ggplot itself (though, of course, it's totally your call).

Hope this helps!



Is it right to say there is not a way in ggplot2 that you can specify a geom_ to apply aes?


You absolutely can specify aes within geoms, e.g.:

ggplot(mtcars, aes(x = wt, y = mpg)) + 
  geom_point(aes(colour = factor(cyl)))


I think @trcc is referring to "geom_*" as an argument of aes() somehow…