【问题标题】:Knitr: figure legend too bigKnitr:人物传说太大了
【发布时间】:2016-06-16 17:19:49
【问题描述】:

当我编织 Tufte 讲义 pdf 时,某些人物的图例通常太大。我正在编织一个fig.fullwidth=TRUE 部分,并将@​​987654326@ 参数从2 更改为50,看看它们是否有任何区别。当我指定fig.width=2 时,我最终会得到一个小图,并且图例会大大扩展以填充空间:

显然下一步是尝试更大的fig.width,但这些在fig.width=10 之后就不再有任何区别了(不过还是更好):

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

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

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

但这些对 knitr 图例没有影响(尽管它们在按预期手动绘制时确实会影响情节)。

最小的可重现示例(粘贴到 .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
```

一如既往,感谢您查看此内容。

【问题讨论】:

  • 我试图运行你的代码。安装一堆软件包后,它仍然失败并显示Error: isTRUE(gpclibPermitStatus()) ist nicht TRUE。如果您可以就如何重现问题提供一些建议,其他人/我可能会找到您问题的答案。
  • 感谢您检查@CL。我已经在两台不同的机器(一台 Windows,一台 Linux)上的新 R 会话上尝试了我的脚本,并且没有遇到任何错误。我认为我没有使用任何 gpclib 电话,所以我不确定它为什么要检查。您可以尝试重新安装rgeos 看看是否有什么不同?
  • 嗯?重新安装 rgeos 有所帮助 - 尽管我只是在几分钟前安装该软件包。无论如何,是时候转向实际问题了……
  • 谢谢@CL。 rgeosmaptoolsrgdal 是很棒的工具,但有时它们只是奇怪

标签: r ggplot2 knitr figure


【解决方案1】:

我认为这是因为地图必须将纵横比设置为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 的图。

【讨论】:

    猜你喜欢
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2011-04-10
    相关资源
    最近更新 更多