r语言 - 如何在手动执行块和使用knitr和ggsave编织文件之间匹配PNG图像大小



我用'knitr'包编织了一个PDF。它还使用'ggsave'在目录中保存PNG文件。

  • 手动从chunk生成PNG文件时
    • 条形图:PNG文件大小为13.3 kb,尺寸为1008 × 1008。
  • 在编织过程中生成PNG文件时,使用"Ctrl +Shift +K">
    • 条形图:PNG文件大小为11.4 kb,尺寸为936 * 647.

我该怎么做,以便在这两种情况下生成的PNG文件应该具有相同的大小和尺寸?如果可能的话,我希望在这两种情况下的输出都是13.3 kb。

我已经添加了最小可重复的例子代码。请将其保存为" rmd "生成PNG和PDF的文件。

谢谢

  • 生成PDF的文件的YAML头文件(用三重虚线包围)
title: "Image Size Mismatch"
output: pdf_document
  • R代码加载包,生成条形图,并保存为PNG。

编辑:小代码示例

# 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中描述了调整地块大小和纵横比,ggsavehelp("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内或Rmd外调用ggsave

最新更新