我有一些ggplot2
图,其中包含 lot 的文字(没办法),我正在*.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()
```
这很有效,给我一些类似下面的PDF格式。
我现在想让这些标签(Test
)尽可能大而不会过度绘制。
我的问题是我现在看到 2 &#34;杠杆&#34;我可以拉来改变字体大小:
ggplot2
,更改,添加,说,geom_text(size=12)
knitr
(或Rmarkdown
?),添加一个块选项,如`fig.width = 15,fig.height = 15),其中也更改字体大小相对于总体情节大小(出于我不太了解的原因)。显然, 1。将是直截了当的方式,但我需要根据输出的大小调整geom_text(size=...)
,例如,linewidth
时LaTeX更改或我的博客帖子的列宽。
至少可以说,这似乎是不优雅的。
如何以优雅,可扩展的方式实现这一目标,以产生漂亮的情节?
我对此仍然有点模糊,工具链(Rmarkdown
?,Knitr
?,GGplot2
)的位置我应该开始...
Ps:作为奖励,字体大小应该以编程方式到达,因为字符串Text
的长度因现实生活中的情节而不同。
答案 0 :(得分:9)
我认为设备尺寸为一张纸,12磅字体在任何尺寸的纸张上都是相同的尺寸。但是,在pdf_document中,图像会缩放以适合图形区域,从而相应地缩小或拉伸图形中的字体大小。
我建议尝试使用tikz图形。 Rmarkdown允许您将LaTeX命令和选项合并到.Rmd中,并在pdf_document中正确呈现它们。使用tikz图形可以为图形中的每个label
指定特定的标记功能。
首先,您需要包含正确的标题信息
---
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()
```
并生成输出:
较小的图形,需要编辑标签的字体大小:
```{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)
```
输出: