Хобрук: Ваш путь к мастерству в программировании

ggplot2, расположите несколько графиков, все одинакового размера, без промежутков между ними

Я хотел бы объединить несколько графиков в одну фигуру без каких-либо промежутков между областью графика, и все графики должны быть одинакового размера (см. Изображение ниже для эскиза моей желаемой фигуры, которая состоит из 6 отдельных графиков).

желаемая фигура, состоящая из 6 отдельных графиков

Я пробовал ggarrange (ggpubr) и plot_grid (cowplot) и пару других, но, похоже, у них такая же проблема - вы можете выровнять графики, чтобы они были одного размера, но не располагать их ближе друг к другу.

ggdraw в пакете cowplot позволяет точно указать, где располагаются участки, но все они немного отличаются по размеру.

Есть ли способ преодолеть это?

По сути, я хочу сделать область графика (где отображаются данные, НЕ оси и метки) одинаковой для шести графиков, а затем расположить их непрерывно. Пока я не нашел способа сделать это.

Переменная оси x одинакова для всех 6 графиков, но y отличается, и на некоторых графиках есть несколько серий, но не на других, поэтому я не могу использовать опцию фасета в ggplot2.

Пожалуйста помоги!

РЕДАКТИРОВАТЬ: Извините, еще немного информации - поскольку мои графики имеют разные переменные y, поля графика и панели графика имеют немного разные размеры. Это означает, что когда я пытаюсь сложить их все вместе, они не совпадают. Графики разных размеров вне выравнивания. plot_grid из cowplot позволяет вам указать положение и размер, НО, размер - это размер всего графика, панели и полей. Из-за меток оси Y поля имеют разные размеры, и изменить их размер с помощью аргументов plot_grid не так просто.

13.03.2019

  • Вы видели эти вопросы? Не уверен, что они дублируются, но они могут помочь: уменьшить пространство между сеткой. Упорядочить графики и параллельные графики с ggplot2 14.03.2019
  • cowplot::draw_plot позволяет указать положение, высоту и ширину. 14.03.2019
  • Я использую библиотеку (gridExtra) для объединения графиков - отлично работает. Укажите layout ‹- rbind (c (1, 1, 1), c (2, 2, 2)) и используйте grid.arrange (p1, p2, layout_matrix = layout) И для p1 и p2 (два графика ggplots) добавьте theme (plot.margin = unit (c (0,0,0,0), cm)), чтобы контролировать расстояние между двумя графиками 14.03.2019
  • Возможный дубликат параллельных графиков с ggplot2 14.03.2019
  • Спасибо за ваши ответы. Ни один из вариантов не был тем, что я искал: stackoverflow.com/questions/1249548/ по-прежнему оставляет некоторые пробелы между графиками, и мне нужно, чтобы эти пробелы полностью исчезли. Это одно stackoverflow.com/questions/13299496/ Я даже не понимаю, как пользоваться, поскольку я относительно новичок в R. 15.03.2019
  • @Annaz, который, кажется, работает только в том случае, если панели графика уже имеют одинаковый размер, в противном случае это приводит к кропотливому процессу настройки множества осей, пытаясь получить панели одинакового размера. 15.03.2019

Ответы:


1

Так что мне удалось найти ответ на основе некоторого кода отсюда: https://community.rstudio.com/t/how-do-i-control-the-size-of-the-panel-in-a-ggplot-so-they-are-istent/14377/8

Графики сначала нужно передать через функцию align_plots() в cowplot(), чтобы составить список графиков:

`multiplot <- align_plots(plotAA,plotBB,plotCC,plotDD,plotEE,plotFF, align = "hv")`    

Тогда все панели графиков будут одинакового размера, и их можно будет расположить с помощью ggdraw() и draw_plot() следующим образом:

`ggdraw() + draw_grob(multiplot[[1]], 0,0.565,.6,.4) +
  draw_grob(multiplot[[2]], 0.396,0.565,0.6,0.4) + 
  draw_grob(multiplot[[3]], 0, 0.285, 0.6,0.4) +
  draw_grob(multiplot[[4]], 0.396, 0.285, 0.6, 0.4) +
  draw_grob(multiplot[[5]], 0,0.004, 0.6, 0.4) +
  draw_grob(multiplot[[6]], 0.396,0.004,0.6,0.4)`

чтобы дать окончательную цифру: Желаемое расположение сюжета

Надеюсь, это поможет кому-то еще в будущем, спасибо.

15.03.2019
  • РЕДАКТИРОВАТЬ: это должна быть функция draw_plot () вместо draw_grob () (хотя либо работает). 15.03.2019
  • 2-е изменение: первое, что я сделал бы, - это сделать панель и фон графика прозрачными, используя theme(panel.background = element_rect(colour=NA, fill = "transparent"), plot.background = element_rect(colour=NA, fill = "transparent")). Тогда проще правильно расположить графики. 15.03.2019
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..


    © 2024 hobruk.ru, Хобрук: Ваш путь к мастерству в программировании