Knitr:人物传奇太大了

时间:2016-03-03 11:41:01

标签: r ggplot2 knitr figure

当我编写一份Tufte讲义pdf时,一些数字的传说往往太大了。我正在编织fig.fullwidth=TRUE部分并将fig.width=参数从2改为50,以确定它们是否有任何区别。当我指定fig.width=2时,我最终会得到一个小图,并且图例会大幅扩展以填充空间:

Knitted figure with fig.width = 2

显然,下一步是尝试更大的fig.width,但这些在约fig.width=10后仍然没有任何区别(虽然现在仍然更好):

Knitted figure with fig.width = 10

我认为fig.width是以英寸为单位的宽度,所以这是有道理的,因为我使用的纸张尺寸是A4,大约8英寸。

我的问题是,如何进一步减小图例的大小,使其占用更合适的尺寸?我尝试手动设置字体大小:

theme(legend.title = element_text(size = 9),
      legend.text = element_text(size = 8))

但这些对编织者图例没有任何影响(尽管它们会在按预期手动绘制时影响绘图)。

最小可重复的示例(粘贴到.Rmd文件并编织):

---
title: "knitr: figure legend too big"
documentclass: article
classoption: a4paper
output: rmarkdown::tufte_handout
---

  ```{r setup, include=FALSE}
require("knitr")
require("rgdal")
require("rgeos")
require("maptools")
require("ggplot2")
```

```{r, fig.cap="test", fig.fullwidth=TRUE, fig.width=10}
# About 650k
download.file("https://census.edina.ac.uk/ukborders/easy_download/prebuilt/shape/England_gor_2011_gen.zip",
              destfile = "regions.zip")
unzip("regions.zip")
regions <- readOGR(dsn = ".", "england_gor_2011_gen")
regions@data$test <- as.character(1:nrow(regions@data))

regions_f <- fortify(regions, region = "name")
regions_f <- merge(regions_f, regions@data, by.x = "id", by.y = "name")

ggplot() +
  geom_polygon(data = regions_f, aes(long, lat, group = group, fill = test),
               colour = "black") +
  coord_equal() +
  theme(legend.title = element_text(size = 9),  # doesn't seem to make
      legend.text = element_text(size = 8))     # a difference to knitr
```

一如既往,感谢您的关注。

1 个答案:

答案 0 :(得分:5)

我认为这是因为地图必须将宽高比设置为1tufte::tufte_handout()中的默认图形高度为2.5,因此即使图形宽度大到10,实际的地图大小仍然像2.5 x 2.5。当您增加fig.width时,您还需要增加fig.height,例如

```{r, fig.cap="test", fig.fullwidth=TRUE, fig.width=6, fig.height=6}

实际上,当您只设置fig.width=10时, knitr 确实生成了10 x 2.5 PDF图像,但 rmarkdown 默认启用了图形裁剪功能,所以图中左右两侧的大白边都会被裁剪掉,最后得到2.5 x 2.5的数字。