Я связал PDF-файл с помощью пакета «knitr». Он также сохраняет файл PNG в каталоге с помощью «ggsave».
Что мне сделать, чтобы файлы PNG, созданные в обоих случаях, имели одинаковый размер и размеры? Если возможно, я бы предпочел, чтобы выходной файл был размером 13,3 КБ в обоих случаях.
Я добавил код для минимального воспроизводимого примера. Пожалуйста, сохраните его как файл ".Rmd" для создания PNG и PDF.
Благодарю вас
title: "Image Size Mismatch"
output: pdf_document
Обновлено: Пример меньшего кода
# Packages
library("knitr")
library("ggplot2")
# Data
hh <- data.frame(groups = factor(c("No", "Yes", NA)), n = c(3843, 856, 19))
# Create Chart
pp <- ggplot(data = hh, aes(x = groups, y = n)) + geom_bar(stat = 'identity')
# Save Image
ggsave("Bar.png", plot = pp, device = "png", dpi = 144)
Старый пример: В нем был ненужный код.
# Packages
library("knitr")
library("dplyr")
library("tibble")
library("ggplot2")
# Data
hh <- tibble(groups = factor(c("No", "Yes", NA)), n = c(3843, 856, 19))
loc_png <- "Pie.png"
# Create Pie Chart
pp <- ggplot(data = hh, aes(x = '', y = n, fill = groups)) +
geom_bar(stat = 'identity', width = 1, color = "white") +
coord_polar(theta = "y", start = 0) +
# Add Text Labels
geom_text(aes(label = paste0(groups, "\n", n)),
position = position_stack(vjust = 0.5)) +
# Theme and Labs
theme(panel.background = element_rect(fill = "white", colour = "white"),
legend.position = 'none', axis.text = element_blank(),
axis.ticks = element_blank(), axis.title = element_blank(),
panel.grid = element_blank()) +
labs(title = "Pie")
# Save Image
ggsave(loc_png, plot = pp, device = "png", dpi = 144)
# Problem:
# Manual Chunk Execution: Output File: Size 32.5 kb, Dimension 1008 x 1008
# Knit "Ctrl +Shift +K" : Output File: Size 22.4 kb, Dimension 936 x 647
@Bernhard 'dplyr', вероятно, не требуется, и его можно исключить. Однако нужны еще 3. Мой вопрос о том, что «один и тот же код должен генерировать одинаковый результат в обоих случаях». Я просмотрел эту страницу, но она не прояснила мою проблему. Тем не менее, спасибо за ваше время.
@Bernhard Во-вторых, вы правы, я мог бы уменьшить требуемый код, когда меня интересует разница в размерах изображений. Извините, так и сделаю.
Вы можете указать размер PNG в вызове ggsave
и размер изображения в вязаном документе с помощью опции fig.dim
в RMarkdown. Если вы установите для обоих одинаковый размер и, возможно, отрегулируете dpi
в вызове ggsave
, чтобы он соответствовал dpi вашего документа, как это не поможет с вашей проблемой?
@ Бернхард, спасибо. Понял наконец!! ggsave
берет размер из окна, которое оказалось (6,3 дюйма) отличным от размера по умолчанию для трикотажа (7 дюймов). При выполнении чанка вручную используется настройка Knitr (7). Однако во время вязания ggsave предоставляет размер окна R (6.3), который переопределяет значение по умолчанию для вязания. Предоставление значения в вызове ggsave решило мою проблему, как вы предложили. Если вы напишете свой комментарий в качестве ответа, я приму его, иначе завтра исправлю сам. Спасибо еще раз за помощь.
Вы можете контролировать, насколько большим и с каким соотношением сторон будет отображаться график как в RMarkdown, так и с помощью ggsave
. Для вашей цели вы захотите установить для обоих одинаковые значения.
Регулировка размера графика и, следовательно, соотношения сторон описаны в https://bookdown.org/yihui/rmarkdown-cookbook/figure-size.html, правильное использование ggsave
в help("ggsave")
.
Следующий минимальный пример действителен для Rmd и использует обе опции из одного и того же файла:
---
title: "Untitled"
output: pdf_document
---
```{r, fig.dim = c(5, 3)}
library(ggplot2)
ggplot(iris) +
geom_point(aes(x = Sepal.Length, y = Sepal.Width))
ggsave("test.png", width = 5, height = 3, units = "in")
```
Честно говоря, я не знаю, сколько точек на дюйм (dpi) используется в вязаном документе, мой пример, похоже, написан в виде векторного файла, но при необходимости это также можно легко адаптировать в вызове ggsave
. Будьте зовом ggsave
в Rmd или за его пределами.
Честно говоря, ваш «минимальный» пример требует 4 импорта и вызова для определения цвета фона? Кстати, вы можете контролировать размер png в вызове
ggsave
, и вы можете найти некоторую информацию о размере в вязаном документе здесь: bookdown.org/yihui/rmarkdown-cookbook/figure-size.html