在 R Markdown PDF 输出中更改图表大小的输出宽度

Change output width of plotly chart size in R Markdown PDF output

在 R markdown 文件中,有人知道为什么 out.widthout.heightfigure.widthfigure.height 参数在生成 pdf 时不会改变 plotly 图表大小文件? (我精确地说,这些参数使用 plot 函数可以完美工作)

请在下面找到一个带有 Rmarkdown 文件的可重现示例

在这个例子中,我希望绘图图表像绘图图表一样占据整个 sheet。

---
title: "Change chart size chart on pdf file using plotly"
output:
  pdf_document: default
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(echo=FALSE,message=FALSE)

```

## Parameters doesn't work with plotly  

```{r, out.width='100%',out.height='100%',fig.height=20, fig.width=15, fig.align="left"}
library(plotly)
plot_ly(x = cars[1:10,]$speed,y = cars[1:10,]$dist)
```

## Parameters works using plot function

```{r,out.width='130%',out.height='100%', fig.height=20, fig.width=15, fig.align="left"}
plot(cars[1:10,])
```

绘图主要是为交互式输出而设计的,因此,在导出为 PDF 静态图像时可能表现得有点奇怪。这个问题有一些 similar posts in the past,并且似乎来自 webshot 创建静态图像的方式。

您可以通过在创建图表时强制绘制图表尺寸来解决此问题。 plot_ly 函数具有参数 widthheight,可让您设置结果图的输出维度。

如果你想在 PDF 报告中包含 HTML 对象,你可以使用 webshot 包,它本质上是截取渲染图的屏幕截图并将其转换为供您包含在报告中的静态图像。这在 bookdown book 中有很好的解释。要安装它,您需要 运行:

install.packages('webshot')
webshot::install_phantomjs()

安装 webshot 后,它应该会自动运行:

---
title: "Change chart size chart on pdf file using plotly"
output:
  pdf_document: default
papersize: a4
---

```{r include=FALSE}
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE)
library(plotly)
```

```{r, out.width="100%"}
plot_ly(x = cars[1:10,]$speed,y = cars[1:10,]$dist, width = 1000, height = 1200)
```

如果我能弄清楚它为什么有效,我会更新这个答案,但希望能有所帮助!

在使用 r markdown pdf 绘制绘图时需要非常小心。

创建绘图时,

  • 不要忘记明确设置图表的大小(宽度和高度)
  • 使用 out.width 和 out.height 的块选项。他们都接受 pt,mm,in,px,%
  • 如果您在 pdf 中生成乳胶输出,那么 'px' 将不起作用。

请找到以下图形代码及其输出。

f <- list(
    size = 30,
    family = 'sans-serif'
  )
  m <- list(
    l = 100,
    r = 50,
    b = 0,
    t = 0,
    pad = 4
  )

p <- plot_ly(width = 800, height = 800) %>% 
  add_markers(data = pressure, x = pressure$temperature, y = pressure$pressure) %>% 
  layout(font = f, margin = m)
p

由此产生的输出是 with size and margins

修改代码块选项后如下:

```{r pressure2, echo=FALSE, out.height="150%", out.width="150%"}
f <- list(
    size = 30,
    family = 'sans-serif'
  )
  m <- list(
    l = 100,
    r = 50,
    b = 0,
    t = 0,
    pad = 4
  )

p <- plot_ly(width = 800, height = 800) %>% 
  add_markers(data = pressure, x = pressure$temperature, y = pressure$pressure) %>% 
  layout(font = f, margin = m)
p
```

你会得到一个much bigger graph

继续编码!

您是否尝试过仅使用 fig.heightfig.width 选项并删除 out.widthout.height

{r , fig.height=6, fig.width=9.5}

我正在玩 plotly,我已经成功地使用了 HTML 笔记本。这是更多的试验和错误,但你不必重建地块。