Как вы заставляете графики Rmarkdown быть квадратными, а не прямоугольными? - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть обобщенная линейная модель (GLM), которую я планирую диагностировать для использования функции glm.diag.plots в пакете MASS. Но он имеет тенденцию рисовать прямоугольник вместо квадрата, что очень уродливо для публикации.

Ниже приведен пример кода, который показывает проблему в файле .Rmd. В Rstudio вы можете просто перетаскивать окно до тех пор, пока оно не станет квадратным, но это невозможно в документах Rmarkdown, и я бы хотел принудительно настроить квадрат вручную. enter image description here

Я проверил в документации ggplot способы принудительного применения построения квадратов, но ничего не смог найти. glm.diag.plot (), по-видимому, использует split.screen (), которая также не предоставляет никакой документации для обеспечения соотношения сторон.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

@ rawr комментарий точный; это проблема knitr / markdown, а не glm.diag, ggplot или что-то еще. Все, что вам нужно сделать, это указать желаемую высоту и ширину вывода (в дюймах по умолчанию), используя fig.width и fig.height.

enter image description here

0 голосов
/ 29 апреля 2018

Похоже, вы используете glm.diag.plots из пакета boot для получения участков. Вы можете воссоздать их, используя ggplot, если хотите. Вот пример:

некоторые модели:

data(anorexia, package = "MASS")

anorex.1 <- glm(Postwt ~ Prewt + Treat + offset(Prewt),
                family = gaussian, data = anorexia)

glm.diag.plots выход

library(boot)
glm.diag.plots(anorex.1)

enter image description here

Для создания каждого сюжета в ggplot сначала получите объект из glm.diag.plots

z <- glm.diag.plots(anorex.1, ret = T)

затем постройте каждый участок:

library(ggplot2)

plot1 <- ggplot(data.frame(x = predict(anorex.1),
                           y = z$res))+
  geom_point(aes(x, y)) +
  xlab("Linear predictor") +
  ylab("Residuals") +
  theme_bw()+
  theme(aspect.ratio=1)

plot2 <- ggplot(data.frame(x = qnorm(ppoints(length(z$rd)))[rank(z$rd)],
                           y = z$rd)) +
  geom_point(aes(x, y)) +
  xlab("Ordered deviance residuals") +
  ylab("Quantiles of standard normal") +
  geom_abline(intercept = 0, slope = 1, lty =2) +
  theme_bw()+
  theme(aspect.ratio=1)

plot3 <- ggplot(data.frame(x = z$h/(1-z$h),
                           y = z$cook)) +
  geom_point(aes(x, y)) +
  xlab("h/(h-1)") +
  ylab("Cook statistic") +
  theme_bw()+
  theme(aspect.ratio=1)

plot4 <- ggplot(data.frame(x = 1:length(z$cook),
                           y = z$cook)) +
  geom_point(aes(x, y)) +
  xlab("Case") +
  ylab("Cook statistic") +
  theme_bw()+
  theme(aspect.ratio=1)

затем объединить их

library(cowplot)

plot_grid(plot1, plot2, plot3, plot4, ncol = 2)

enter image description here

Теперь вы можете настроить каждый сюжет так, как вам нравится.

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