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

时间:2018-10-04 14:19:16

标签: r pdf-generation r-markdown knitr r-plotly

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

请在下面找到带有Rmarkdown文件的可复制示例

在此示例中,我希望绘图图像绘图图一样占据整个工作表。

---
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,])
```

enter image description here

2 个答案:

答案 0 :(得分:2)

图解图主要用于交互式输出,因此,在导出为PDF的静态图像时,其行为可能会有些奇怪。这个问题有一些similar posts in the past,并且似乎是由webshot如何创建静态图像引起的。

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

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

```{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)
```

enter image description here

如果我能确切知道它为什么起作用,将更新此答案,但希望能有所帮助!

答案 1 :(得分:2)

在使用带有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

继续编码!