如何在手动执行块和使用 knitr 和 ggsave 编织文件之间匹配 PNG 图像大小
How to match the PNG image size between manually executing a chunk and knitting a file using knitr and ggsave
我使用 'knitr' 包编写了一个 PDF。它还使用 'ggsave'.
在目录中保存一个 PNG 文件
- 当 PNG 文件是从块中手动生成时
- 条形图:PNG 文件大小为 13.3 kb,尺寸为 1008 x 1008。
- 在编织过程中生成PNG文件时,使用“Ctrl +Shift +K”
- 条形图:PNG 文件大小为 11.4 kb,尺寸为 936 x 647。
我应该怎么做才能使两种情况下生成的 PNG 文件具有相同的大小和尺寸?如果可能的话,我希望两种情况下的输出均为 13.3 kb .
我添加了最小可重现示例的代码。请将其保存为“.Rmd”文件以生成 PNG 和 PDF。
谢谢
- 要生成 PDF 的文件的 YAML Header(用三重破折号包围)
title: "Image Size Mismatch"
output: pdf_document
- 用于加载包、生成条形图并将其保存为 PNG 的 R 代码。
编辑:更小的代码示例
# 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
您可以控制在 RMarkdown 和 ggsave
中绘制的图的大小和纵横比。为了您的目的,您需要将两者设置为相同的值。
https://bookdown.org/yihui/rmarkdown-cookbook/figure-size.html 中描述了调整绘图大小和宽高比,help("ggsave")
.
中描述了 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
的调用。在 Rmd 之内或之外调用 ggsave
。
我使用 'knitr' 包编写了一个 PDF。它还使用 'ggsave'.
在目录中保存一个 PNG 文件- 当 PNG 文件是从块中手动生成时
- 条形图:PNG 文件大小为 13.3 kb,尺寸为 1008 x 1008。
- 在编织过程中生成PNG文件时,使用“Ctrl +Shift +K”
- 条形图:PNG 文件大小为 11.4 kb,尺寸为 936 x 647。
我应该怎么做才能使两种情况下生成的 PNG 文件具有相同的大小和尺寸?如果可能的话,我希望两种情况下的输出均为 13.3 kb .
我添加了最小可重现示例的代码。请将其保存为“.Rmd”文件以生成 PNG 和 PDF。
谢谢
- 要生成 PDF 的文件的 YAML Header(用三重破折号包围)
title: "Image Size Mismatch"
output: pdf_document
- 用于加载包、生成条形图并将其保存为 PNG 的 R 代码。
编辑:更小的代码示例
# 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
您可以控制在 RMarkdown 和 ggsave
中绘制的图的大小和纵横比。为了您的目的,您需要将两者设置为相同的值。
https://bookdown.org/yihui/rmarkdown-cookbook/figure-size.html 中描述了调整绘图大小和宽高比,help("ggsave")
.
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
的调用。在 Rmd 之内或之外调用 ggsave
。