[R] Arranging ggplot2 objects with ggplotGrob()

H @gent@ @end|ng |rom medd@t@|nc@com
Sat Jul 25 20:13:23 CEST 2020


On 07/25/2020 12:36 PM, Rui Barradas wrote:
> Hello,
>
> Inline.
>
> Às 16:54 de 25/07/2020, H escreveu:
>> On 07/24/2020 05:56 PM, Rui Barradas wrote:
>>> Hello,
>>>
>>> I've just tried it.
>>>
>>> library(ggplot2)
>>> #library(grid)
>>> library(cowplot)
>>>
>>> s <- ggplot(data = subset(iris, Species == 'virginica'), aes(Sepal.Length, Sepal.Width)) + geom_point()
>>> v <- ggplot(data = subset(iris, Species == 'setosa'), aes(Sepal.Length, Sepal.Width)) + geom_point()
>>>
>>> #g2 <- ggplotGrob(s)
>>> #g3 <- ggplotGrob(v)
>>> #g <- rbind(g2, g3, size = "first")
>>>
>>> cowplot::plot_grid(s, v, align = "h", nrow = 2, rel_heights = 2:1)
>>>
>>>
>>> Hope this helps,
>>>
>>> Rui Barradas
>>>
>>> Às 19:57 de 24/07/2020, Felipe Carrillo via R-help escreveu:
>>>> What about cowplot?
>>>> https://cran.r-project.org/web/packages/cowplot/vignettes/introduction.html
>>>>
>>>>       On Friday, July 24, 2020, 11:51:17 AM PDT, H <agents using meddatainc.com> 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?|
>>>>
>>>> ||
>>>>
>>>>
>>>>       [[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.
>>>
>> Thank you for your example. However, this does not align the plot areas horizontally. It happens to do so in this example because the y-axis labels are the same length etc but when this is not the case, it fails.
>
> Maybe it fails but can you give an example?
> The question, as far as I understand it, is about the plots' relative heights, not about horizontal alignment. And (all) others have asked you to give a reproducible example, please don't ask us to guess a use case axis labels lengths (!), which is impossible to do.
>
> Anyway, the function cowplot::plot_grid has an argument `align`. One of the possible values is "hv" for both horizontal and vertical alignment.
>
> Hope this helps,
>
> Rui Barradas
>
>>
>> ______________________________________________
>> 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.
>
>
The easiest demonstration would be to replace:

v <- ggplot(data = subset(iris, Species == 'setosa'), aes(Sepal.Length, Sepal.Width)) + geom_point()

with:

v <- ggplot(data = subset(iris, Species == 'setosa'), aes(Sepal.Length, Sepal.Width * 1000)) + geom_point()

I am looking to not only being able to set relative heights of rows (as your code correctly does) but also have the plot areas aligned.



More information about the R-help mailing list