Выравнивание графиков размера эффекта в R Markdown (используя SJplot) - PullRequest
1 голос
/ 12 февраля 2020

Я думаю, что часть этого вопроса касается пакета sjPlot, но я обнаружил, что пакет довольно гибкий и отражает ggplot, поэтому я надеюсь, что у кого-то есть ответ.

Если вы свяжете Код, который я написал ниже (используя mtcars) в PDF, вы увидите, что эти два графика не совпадают. Оставьте в стороне, что я умышленно создал ситуацию (делая метки по осям Y разных размеров и бессмысленных моделей), но как я могу получить два отдельных графика одинакового размера (несмотря на то, что метки по оси Y имеют разную длину)? Может быть, лучшее, что я могу сделать, - это набрать их по z и убедиться, что ни одна из меток оси y не превышает определенную длину (не идеальную, но и не ужасную).

Кроме того, я тоже пытаясь сделать так, чтобы между двумя графиками не было (или минимально) вертикального пустого пространства (чтобы они почти перекрывались). Поэтому первым делом будет удаление меток (оценок) оси X и заголовка оси X и сохранение их для последнего графика (что я сделал), но вы все равно можете видеть, что это выглядит как СП. Как я могу сделать лучше?

У меня есть около 10 графиков величины эффекта в двух столбцах (один для математики, один для английского языка sh, отображение результатов PCA и т. Д. c.), Но я думаю, что проблема можно перевести на два графика, которые вы получите из Markdown.

Большое спасибо!

---
title: "Untitled"
author: "Effect Sizes"
date: "1/25/2020"
output:
  pdf_document: default

---
```{r echo = FALSE, include=FALSE}

library(tidyverse)
library(lme4)
library(sjPlot)
library(sjlabelled)
```

```{r effect size dem, echo=FALSE, warning=FALSE, message=FALSE, fig.height = 1.1, fig.width = 4, fig.show="hold", fig.align="center"}

mpg <- lmer(mpg~wt + gear + carb + (1|cyl), mtcars, na.action = 'na.exclude', control = lmerControl(optimizer = "nloptwrap", calc.derivs = FALSE), REML = FALSE)

hp <- lmer(mpg~hp + (1|cyl), mtcars, na.action = 'na.exclude', control = lmerControl(optimizer = "nloptwrap", calc.derivs = FALSE), REML = FALSE)

plot_model(mpg, type = "std", title = "")+
  theme(axis.text.x = element_blank(),
         axis.title.x = element_blank())+
  xlab("")+
  ylim(-1,1)


labels <- c(hp = "horse power")
plot_model(hp, type = "std", title = "", axis.labels = labels)+
  xlab("")+
  ylim(-1,1)

```

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Я бы не стал полагаться на вязание уценки в этом случае. Совместите графики с пакетом, например, patchwork отлично.

Вам необходимо отрегулировать поля графиков, чтобы уменьшить расстояние между графиками. Однако я чувствую, что попытка исчезновения вертикального расстояния между каждым графиком наглядно предполагает, что для всех прогнозов использовалась одна и та же модель, а это не так - поэтому это может ввести в заблуждение.

p1 <- 
  plot_model(mpg, type = "std", title = "")+
  theme(axis.text.x = element_blank(),
        axis.title.x = element_blank(),
        axis.ticks.x = element_blank(),
        plot.margin = margin(b = 0))+
  labs(x = NULL) +
  ylim(-1,1)

labels <- c(hp = "horse power")

p2 <- 
  plot_model(hp, type = "std", title = "", axis.labels = labels)+
  labs(x = NULL) +
  theme(plot.margin = margin(b = 0)) +
  ylim(-1,1)

library(patchwork)

p1 /  p2 

на рисунке показан скриншот из превью RStudio ноутбука rmarkdown enter image description here

1 голос
/ 12 февраля 2020

Там может быть несколько способов. Это мое решение с использованием ggpubr. Я изменил последний кусок:


mpg <- lmer(mpg~wt + gear + carb + (1|cyl), mtcars, na.action = 'na.exclude', control = lmerControl(optimizer = "nloptwrap", calc.derivs = FALSE), REML = FALSE)

hp <- lmer(mpg~hp + (1|cyl), mtcars, na.action = 'na.exclude', control = lmerControl(optimizer = "nloptwrap", calc.derivs = FALSE), REML = FALSE)

a <- plot_model(mpg, type = "std", title = "")+
  theme(axis.text.x = element_blank(),
         axis.title.x = element_blank())+
  xlab("")+
  ylim(-1,1)

labels <- c(hp = "horse power")

b <- plot_model(hp, type = "std", title = "", axis.labels = labels)+
  xlab("")+
  ylim(-1,1)
library(ggpubr)
ggarrange(a, b, ncol = 1, nrow = 2, 
          align = "v")

, чтобы получить что-то вроде:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...