max*_*eld 10 plot r 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 = aes(x = x, y = y, label = word)) + geom_text()
```
Run Code Online (Sandbox Code Playgroud)
这很好用,给我一些类似下面的PDF格式.

我现在想让这些标签(Test)尽可能大而不会过度绘图.
我的问题是我现在看到2个 "杠杆"我可以拉动来改变字体大小:
ggplot2,改变,添加,说,geom_text(size=12)knitr(或Rmarkdown?),添加一个块选项,如`fig.width = 15,fig.height = 15),这也改变了相对于整体绘图大小的字体大小(原因我不是真的了解).显然,1.将是直截了当的方式,但我需要geom_text(size=...)根据输出的大小进行调整,例如,当linewidthLaTeX中的更改或我的博客帖子的列宽时.至少可以说,这似乎是不优雅的.
我如何以优雅,可扩展的方式实现这一目标,从而产生漂亮的情节?
我对此仍然有点模糊,在工具链中哪里(Rmarkdown?,Knitr?GGplot2),我应该开始......
Ps:作为奖励,字体大小应该以编程方式到达,因为字符串的长度Text在现实生活中从剧情到情节不等.
我认为设备尺寸为一张纸,12磅字体在任何尺寸的纸张上都是相同的尺寸.但是,在pdf_document中,缩放图像以适合图形区域,从而相应地缩小或拉伸图形中的字体大小.
我建议尝试tikz图形.Rmarkdown允许您将LaTeX命令和选项合并到.Rmd中,并在pdf_document中正确呈现它们.使用tikz图形允许您为label图形中的每个指定特定的标记功能.
首先,您需要包含正确的标头信息
---
title: SO Example
output: pdf_document
header-includes:
- \usepackage{lipsum}
- \usepackage{tikz}
---
Run Code Online (Sandbox Code Playgroud)
该.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()
```
Run Code Online (Sandbox Code Playgroud)
并产生输出:
一个较小的图形,需要编辑标签的字体大小:
```{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()
```
Run Code Online (Sandbox Code Playgroud)
# 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)
```
Run Code Online (Sandbox Code Playgroud)
随着输出:
| 归档时间: |
|
| 查看次数: |
3724 次 |
| 最近记录: |