#r #ggplot2 #plot
#r #ggplot2 #график
Вопрос:
Для простоты вот исполняемый код с поддельными данными, который точно создает проблему. Графики,
library(ggplot2)
library(ggpubr)
data1 <- data.frame(
V1=replicate(18, {sample(1:18, 1)}),
V2=replicate(18, {sample(1:3, 1)}),
V3=replicate(18, {sample(1:3, 1)})
)
graph1 <- ggplot(data1, aes(x=V1, y=V2, fill=V3)) geom_tile(size=0.5) coord_equal()
data2 <- data.frame(
V1=replicate(18, {sample(1:3, 1)}),
V2=replicate(18, {sample(1:3, 1)})
)
graph2 <- ggplot(data2, aes(x=c("A"), y=V1,fill=V2)) geom_tile(size=0.5) coord_equal()
ggarrange(graph1, graph2, labels = c("A", "B"), ncol = 2, nrow = 1)
генерировать,
и, как вы можете видеть, первый график сжимается, потому что он слишком большой. Как мне предотвратить сжатие первого графика, даже если это приведет к получению изображения очень большой ширины?
Обратите внимание, что результат аналогичен тому, что получается при запуске ggarrange
, nrow=5
но если я это сделаю, то график будет плоским, а все остальные элементы выглядят странно:
Использование widths
, как предложено в одном ответе, генерирует:
Которые имеют разную высоту. Я предполагаю, что это может выглядеть просто отлично при некоторых настройках экранов. Как я могу гарантировать, что оба графика всегда имеют одинаковую высоту независимо от размера области просмотра?
Ответ №1:
Одним из вариантов является указание относительной ширины каждого рисунка, например
library(tidyverse)
library(ggpubr)
data1 <- data.frame(
V1=replicate(18, {sample(1:18, 1)}),
V2=replicate(18, {sample(1:3, 1)}),
V3=replicate(18, {sample(1:3, 1)})
)
graph1 <- ggplot(data1, aes(x=V1, y=V2, fill=V3)) geom_tile(size=0.5) coord_equal()
data2 <- data.frame(
V1=replicate(18, {sample(1:3, 1)}),
V2=replicate(18, {sample(1:3, 1)})
)
graph2 <- ggplot(data2, aes(x=c("A"), y=V1,fill=V2)) geom_tile(size=0.5) coord_equal()
ggarrange(graph1, graph2, labels = c("A", "B"), ncol = 2, nrow = 1, widths = c(0.85, 0.15))
Вы можете указать размеры при сохранении графика:
ggsave(filename = "example.png", width = 12, height = 3, units = "in")
Редактировать
В файле RMarkdown вы также можете указать fig.height и fig.width для изменения размеров конечного рисунка, например
> ---
> title: "test"
> author: "test"
> date: "11/12/2020"
> output: html_document
> ---
>
> ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ```
>
> ```{r plot, fig.height=3, fig.width=12}
> library(tidyverse)
> library(ggpubr)
> data1 <- data.frame( V1=replicate(18, {sample(1:18,
> 1)}), V2=replicate(18, {sample(1:3, 1)}), V3=replicate(18,
> {sample(1:3, 1)}) )
>
> graph1 <- ggplot(data1, aes(x=V1, y=V2,
> fill=V3)) geom_tile(size=0.5) coord_equal()
>
> data2 <- data.frame( V1=replicate(18, {sample(1:3, 1)}),
> V2=replicate(18, {sample(1:3, 1)}) ) graph2 <- ggplot(data2,
> aes(x=c("A"), y=V1,fill=V2)) geom_tile(size=0.5) coord_equal()
>
> ggarrange(graph1, graph2, labels = c("A", "B"), ncol = 2, nrow = 1,
> widths = c(0.85, 0.15))
> ```
Комментарии:
1. Спасибо, однако это выглядит правильно только в файле png. Есть ли способ сделать так, чтобы это выглядело так во всех случаях?
2. Да, в R studio высоты не совпадают. Я полагаю, что даже размер экрана оказывает некоторое влияние на то, как он выглядит.
3. Я обновил хорошие усилия, вложенные в ваш ответ, но я определенно ищу решение, которое не требует изменения размера, поскольку конечным результатом будет связанный HTML-документ. Я не могу рассчитывать на то, что конечный пользователь изменит размер графика. Есть ли какое-либо другое решение для постоянного сохранения равных высот?
4. Привет, @adelriosantiago, мой отредактированный ответ решает вашу проблему?
5. Извините @adelriosantiago, у меня нет идей — не стесняйтесь удалять вопрос и делать репост, чтобы попытаться получить лучший ответ. Было бы здорово использовать некоторые из ваших фактических данных, если это возможно. Извините, я не смог помочь больше