[R] Arranging ggplot2 objects with ggplotGrob()

Ulrik Stervbo U|r|k@Stervbo @end|ng |rom ruhr-un|-bochum@de
Tue Jul 28 18:35:37 CEST 2020


Would this work:

```
library(ggplot2)
library(cowplot)

p1 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + 
geom_point()
p2 <- ggplot(iris, aes(x = Petal.Length, y = Petal.Width * 1000)) + 
geom_point()

plot_grid(p1, p2, ncol = 1, align = "hv", rel_heights = c(2, 1))
```

Best,
Ulrik

On 2020-07-24 21:58, Bert Gunter wrote:
> ?grid.frame, etc. should be straightforward for this I would think.
> But of course you have to resort to the underlying grid framework 
> rather
> than the ggplot2 interface.
> 
> Bert Gunter
> 
> "The trouble with having an open mind is that people keep coming along 
> and
> sticking things into it."
> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
> 
> 
> On Fri, Jul 24, 2020 at 12:11 PM H <agents using meddatainc.com> wrote:
> 
>> On 07/24/2020 02:50 PM, H wrote:
>> > On 07/24/2020 02:03 PM, Jeff Newmiller wrote:
>> >> The set of people interested in helping when you supply a minimal
>> reproducible example is rather larger than the set of people willing 
>> to
>> read the documentation for you (hint) and guess what aspect of 
>> alignment
>> you are having trouble with.
>> >>
>> >> On July 24, 2020 10:46:57 AM PDT, H <agents using meddatainc.com> wrote:
>> >>> On 07/24/2020 01:14 PM, John Kane wrote:
>> >>>> <i>Well, I am not looking for help debugging my code but for
>> >>> information to better understand arranging plots vertically. The code
>> >>> above aligns them horizontally as expected.</i>
>> >>>> Sigh, we know the code works but we do not know what the plots are
>> >>> and we cannot play around with them to see if we can help you if we
>> >>> have nothing to work with.
>> >>>> On Fri, 24 Jul 2020 at 12:12, H <agents using meddatainc.com
>> >>> <mailto:agents using meddatainc.com>> wrote:
>> >>>>     On 07/24/2020 05:29 AM, Erich Subscriptions wrote:
>> >>>>     > Hav a look at the packages cowplot and patchwork
>> >>>>     >
>> >>>>     >> On 24.07.2020, at 02:36, H <agents using meddatainc.com
>> >>> <mailto:agents using meddatainc.com>> wrote:
>> >>>>     >>
>> >>>>     >> I am trying to arrange two plots vertically, ie plot 2 below
>> >>> plot 1, where I want the plots to align columnwise but have a height
>> >>> ratio of eg 3:1.
>> >>>>     >>
>> >>>>     >> My attempts so far after consulting various webpages is that
>> >>> the following code aligns them columnwise correctly but I have, so far,
>> >>> failed in setting the relative heights...
>> >>>>     >>
>> >>>>     >> g2<-ggplotGrob(s)
>> >>>>     >> g3<-ggplotGrob(v)
>> >>>>     >> g<-rbind(g2, g3, size = "first")
>> >>>>     >> g$widths<-unit.pmax(g2$widths, g3$widths)
>> >>>>     >>
>> >>>>     >> what would the appropriate statement for the relative heights
>> >>> to add here be?
>> >>>>     >>
>> >>>>     >> grid.newpage()
>> >>>>     >> grid.draw(g)
>> >>>>     >>
>> >>>>     >> Thank you!
>> >>>>     >>
>> >>>>     >> ______________________________________________
>> >>>>     >> R-help using r-project.org <mailto:R-help using r-project.org> mailing
>> >>> list -- To UNSUBSCRIBE and more, see
>> >>>>     >> https://stat.ethz.ch/mailman/listinfo/r-help
>> >>>>     >> PLEASE do read the posting guide
>> >>> http://www.R-project.org/posting-guide.html
>> >>>>     >> and provide commented, minimal, self-contained, reproducible
>> >>> code.
>> >>>>     So this is not possible without using one of those two packages?
>> >>> I got the impression I should be able to use grid.arrange to do so but
>> >>> was not able to get it to work without disturbing the width alignment
>> >>> above...
>> >>>>     ______________________________________________
>> >>>>     R-help using r-project.org <mailto:R-help using r-project.org> mailing list
>> >>> -- To UNSUBSCRIBE and more, see
>> >>>>     https://stat.ethz.ch/mailman/listinfo/r-help
>> >>>>     PLEASE do read the posting guide
>> >>> http://www.R-project.org/posting-guide.html
>> >>>>     and provide commented, minimal, self-contained, reproducible
>> >>> code.
>> >>>> --
>> >>>> John Kane
>> >>>> Kingston ON Canada
>> >>> No need to play around with anything. I am simply looking for
>> >>> assistance on how to use eg arrangeGrob to not only align two plots
>> >>> columnwise but also adjust their heights relative to each other rather
>> >>> than 1:1.
>> >>>
>> >>> Can arrangeGrob() be used for that?
>> >>>
>> >>>
>> >>>     [[alternative HTML version deleted]]
>> >>>
>> >>> ______________________________________________
>> >>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> >>> https://stat.ethz.ch/mailman/listinfo/r-help
>> >>> PLEASE do read the posting guide
>> >>> http://www.R-project.org/posting-guide.html
>> >>> and provide commented, minimal, self-contained, reproducible code.
>> >
>> > Look at
>> https://cran.r-project.org/web/packages/egg/vignettes/Ecosystem.html
>> where there are two mpg charts, one above the other. What would I need 
>> to
>> add to:
>> >
>> > |library(gtable) g2 <-ggplotGrob(p2) g3 <-ggplotGrob(p3) g <-rbind(g2,
>> g3, size = "first") g$widths <-unit.pmax(g2$widths, g3$widths)
>> grid.newpage() grid.draw(g) |
>> >
>> > |to make the second chart 1/2 the size of the top one?|
>> >
>> > ||
>> >
>> The following code aligns the two plot areas of the two charts 
>> perfectly
>> but they are the same height whereas I want to make the bottom one 1/2 
>> as
>> tall as the top one:
>> 
>> g2<-ggplotGrob(s)
>> g3<-ggplotGrob(v)
>> g<-rbind(g2, g3, size = "first")
>> g$widths<-unit.pmax(g2$widths, g3$widths)
>> grid.newpage()
>> grid.draw(g)
>> 
>> 
>>         [[alternative HTML version deleted]]
>> 
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>> 
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list