Как вы заставляете Rmarkdown быть квадратом вместо Rectangle?

97
9

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

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

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

спросил(а) 2021-01-19T15:55:18+03:00 2 месяца, 3 недели назад
1
Решение
87

Похоже, вы используете 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

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

ответил(а) 2021-01-19T15:55:18+03:00 2 месяца, 3 недели назад
62

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

enter image description here

ответил(а) 2021-01-19T15:55:18+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема