在Rmarkdown文档中自动缩放ggplot2的字体大小(等)

在Rmarkdown文档中自动缩放ggplot2的字体大小(等),r,plot,ggplot2,knitr,r-markdown,R,Plot,Ggplot2,Knitr,R Markdown,我有一些ggplot2绘图,其中包含大量文本(无法绕过),我正在*.Rmd中构建,如下所示: --- title: "SO Test" output: pdf_document --- ```{r} library(ggplot2) df <- data.frame(rep(1:5,5),rep(1:5, each=5),rep("Test",5)) colnames(df) <- c("x", "y", "word") ggplot(data = df, mapping = ae

我有一些
ggplot2
绘图,其中包含大量文本(无法绕过),我正在
*.Rmd
中构建,如下所示:

---
title: "SO Test"
output: pdf_document
---

```{r}
library(ggplot2)
df <- data.frame(rep(1:5,5),rep(1:5, each=5),rep("Test",5))
colnames(df) <- c("x", "y", "word")
ggplot(data = df, mapping = aes(x = x, y = y, label = word)) +      geom_text()
```
---
标题:“SO测试”
输出:pdf\U文件
---
```{r}
图书馆(GG2)

df我认为设备的大小是一张纸,12磅字体在任何大小的纸上都是相同的大小。但是,在pdf_文档中,图像被缩放以适合图形区域,从而相应地缩小或拉伸图形中的字体大小

我建议试试tikz图形。Rmarkdown允许您将LaTeX命令和选项合并到.Rmd中,并在pdf_文档中正确呈现它们。使用tikz图形可以为图形中的每个
标签指定特定的标记功能

首先,您需要包含正确的标题信息

---
title: SO Example
output: pdf_document
header-includes:
   - \usepackage{lipsum}
   - \usepackage{tikz}
---
.Rmd
文件将继续

```{r}
# Chunk 1: package load and data set up.
# Note: The `word` column contains labels with LaTeX markups
library(ggplot2)
df <- data.frame(x = rep(1:5,5),
                 y = rep(1:5, each=5),
                 word = c(rep("Test",5), 
                          c("$\\alpha$", "{\\bf bold}", "{\\it italic}",
                            "{\\footnotesize footnotesize}", "$\\beta$"), 
                          rep("test", 15)))
```

```{r, dev = "tikz", fig.width = 6, fig.height = 6}
# A 6 inch by 6 inch figure
ggplot(data = df, mapping = aes(x = x, y = y, label = word)) + geom_text() 
```
动态构建字体大小的示例如下所示: 动态设置标签标记的示例 一些空白文本,后跟一些lipsum form\LaTeX: \lipsum[1] ```{r,dev=“tikz”} 图书馆(stringr)
说明您可以在区块选项内计算的区块名称
{r,fig.height=x,fig.width=y}
其中x和y是在以前的区块中创建的,可能获得博客页面的大小或使用数据框尺寸。这样行吗?另外,我不确定我是否理解fig.height/fig.width如何直接影响记号和文本标签的大小。似乎您应该弄乱元素大小或
geom_text(size=)
谢谢,这将有助于设置整个文档的大小–但它不会解决标签字体大小问题,对吗?我正在寻找的是一种自动放大(给它一个更大的画布)绘图的方法,直到标签不再过度绘制,然后将其重新缩放到我可用的任何地方。如果对象太大,Rmarkdown(或knitr?或某人?)似乎会自动执行后者。蜱虫只用于化妆品;我想如果它们与标签的字体大小保持恒定的关系就好了。您所指的“画布”是10x10设备区域吗?字体大小将随着画布的增加而增加,但这只是间接的,因为您正在增加图片的整体大小。我想说的是,你不想在创建ggplot而不是绘图设备时增加字体大小吗?@rawr很抱歉这么模糊。我编辑了上面的问题,希望现在更清楚。我的问题是1)似乎有两件事会影响打印区域的相对字体大小,2)我不知道如何在ggplot2中自动将字体大小放大到可能的最大值(不包括过度绘制)。哇,太棒了,非常感谢您,特别是将
tikz
引入其中。我之所以不接受这个答案,有两个原因:1)这只会影响
*.Rmd
s的PDF(通过LaTeX)输出,对吗?2) 似乎仍然没有现成的编程解决方案,只需“使标签适合”到
ggplot2
绘图中(例如,如果最新绘图中的数据点较多或较少,则需要再次更改字体大小).1)我通过
knitr::knit
测试了
.Rmd
.md
,然后使用pandoc转换为
.html
.docx
。转换为
.html
正常,图形包含在
标记中。通过一些工作,我确信结果的大小可以调整。对
.docx
的渲染不够完美。我建议将.html或.docx输出为jpeg或png。2) 关于无法动态“使标签适合”的说法可能是正确的。标签将是画布大小、字体、字体大小的函数,这两者都需要根据画布大小进行调整。
```{r, dev = "tikz", fig.width = 3, fig.height = 3}
# A 3 inch by 3 inch figure
ggplot(data = df, mapping = aes(x = x, y = y, label = word)) + geom_text() 
```
# Example of dynamically setting label markups

Some blank text, followed by some lipsum form \LaTeX:

\lipsum[1]

```{r, dev = "tikz"}
library(stringr)
State_Names <- 
  data.frame(x = 1:5, y = rep(10:1, each = 5), state = state.name)

# Set size by lenght of state name
# Less than 8 chars: normalsize
# 8 or more chars: tiny
nchars <- sapply(State_Names$state, nchar)
State_Names$state[nchars >= 8] <- 
  paste0("{\\tiny ", State_Names$state[nchars >= 8], "}")


ggplot(State_Names, aes(x = x, y = y, label = state)) + geom_text() + xlim(0, 6)
```