【问题标题】:In knitr, figure heights do not obey my opts_chunk$set commands when sizes are changed on the fly在 knitr 中,动态更改大小时,图形高度不服从我的 opts_chunk$set 命令
【发布时间】:2013-07-28 10:29:06
【问题描述】:

我正在尝试使用 R 包 knitr 创建 HTML 文件,但我发现整个体验非常困难,可能是因为在不使用 LaTeX 时(并且当人们不知道 Sweave 时)文档很少。具体问题是这样的:

我希望在 HTML 文件中生成两个相似的图表,但每个图表的高度必须不同。所以这是我的 RHTML 文件:

<!DOCTYPE html>
<html>
<head>
  <title>TEST</title>
</head>
<body>



<!--begin.rcode
opts_chunk$set(echo=FALSE, dpi=96, fig.width=9, fig.height=8, dev="png")
  print("Width 9, height 8")
  plot(rnorm(100), col="orange")
end.rcode-->

<hr> 

<!--begin.rcode
opts_chunk$set(echo=FALSE, dpi=96, fig.width=9, fig.height=12, dev="png")
  print("Width 9, height 12")
  plot(rnorm(100), col="purple")
end.rcode-->

<hr>

</body>
</html>

如您所见,两个(简单)图必须具有相同的宽度(9)但不同的高度(8 然后 12)。这在 R 中非常简单,但 knitr 似乎希望保持纵横比相同。这是两个绘图输出:

如您所见,下面的没有我想要的纵横比,它们是不同的宽度。

另外,我在我的 html 文件的顶部得到了所有这些块输出,我认为我用 echo=FALSE.... 抑制了这些块输出。

我该如何解决所有这些问题? opts_chunk$set 是否只设置了某种全局选项?如果我想在每次输出新图表时重置选项怎么办?以及如何抑制 all knitr 包输出?

【问题讨论】:

  • 只是对这些问题进行一般故障排除的建议:确保cache = FALSE 并丢弃数字和缓存子文件夹,以确保它们都得到更新。确保在setup 块中设置了尽可能多的选项。然后,只修改它们更改的块中的块选项。此外,我总是将rm(list = ls()) 放在我的设置块中,以使写入全局环境的某些参数不会挂起。此外,排版会产生中间文件 - 也将它们扔掉以强制新副本。最后,你可以看看knitr中的函数spin。
  • 好的,刚刚尝试了所有这些。 rm(列表 = ls());擦除图形目录中的所有png,重新加载浏览器,清除其缓存;没有喜悦。还是一样。由于我实际上并没有排版(它只是 HTML),所以除了“figure”目录之外,您还知道哪些需要清除?顺便问一下,什么是“设置块”?
  • 这并不正式,但很多人使用第一个代码块来设置knitr 和R 选项和设置。例如,它将具有 opts_chunk 和 library("whatever")。此外,如果您依赖全局变量,您就会错过可重复研究的优点。如果可能的话,让您的脚本生成或至少从 csv 或 RData 或类似的东西中获取这些值。
  • 不,全局变量会不断更新,是的,我可能应该将它们移动到另一个文件。问题是,它们每个大约 3 gb(使用 termstrc 的大量且高度复杂的收益率曲线分析列表)。反正上面的超级简单还是不行!
  • 很抱歉给您带来了困惑。我想我需要在文档中解释这种行为。不过,我所有的示例都在第一个块中执行opts_chunk$set(),例如this one

标签: html r knitr


【解决方案1】:

我认为这与反复设置 opts_chunk 有关,尽管我不知道为什么它不应该按照您想要的方式工作。无论如何,这是一个工作示例。我不会发布结果以节省空间,但它看起来像你想要的 - 尺寸得到尊重。

<!DOCTYPE html>
<html>
<head>
  <title>TEST</title>
</head>
<body>

<!--begin.rcode Setup, echo = FALSE
  opts_chunk$set(echo=FALSE, dpi=96, fig.width=9, fig.height=8, dev="png")
end.rcode-->

<!--begin.rcode Fig1
  print("Width 9, height 8")
  plot(rnorm(100), col="orange")
end.rcode-->

<hr> 

<!--begin.rcode Fig2, fig.width=9, fig.height=12
  print("Width 9, height 12")
  plot(rnorm(100), col="purple")
end.rcode-->

<hr>

</body>
</html>

【讨论】:

  • 工作就像做梦一样,除了我必须在设置后加一个逗号,所以在我的系统上,至少第一块行必须读取:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 2017-12-14
  • 2013-02-28
  • 2016-10-26
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多