[英]Splitting a plot call over multiple chunks
我正在寫一個情節的解釋,我將基本上在第一個塊中創建繪圖,然后描述該輸出,並在第二個塊中添加一個軸。
但是,似乎每個塊都會強制建立一個新的繪圖環境,因此我們在嘗試僅使用axis
運行塊時會出錯。 注意:
---
output: html_document
---
```{r first}
plot(1:10, 1:10, xaxt = "n")
```
Look, no x axis!
```{r second}
axis(side = 1, at = 1:10)
```
axis(side = 1, at = 1:10)
錯誤axis(side = 1, at = 1:10)
:plot.new
尚未調用調用:<Anonymous>
...withCallingHandlers
- >withVisible
- >eval
- >eval
- >axis
執行停止
顯然,這是一個有效的解決方法,具有相同的輸出:
---
output: html_document
---
```{r first}
plot(1:10, 1:10, xaxt = "n")
```
Look, no x axis!
```{r second, eval = FALSE}
axis(side = 1, at = 1:10)
```
```{r second_invisible, echo = FALSE}
plot(1:10, 1:10, xaxt = "n")
axis(side = 1, at = 1:10)
```
但這不太理想(重復的代碼,必須兩次評估情節等)
這個問題是相關的 - 例如,我們可以排除second
塊並在second_invisible
塊上設置echo = -1
(這在我的應用程序中也不起作用,但我不想在這里過於復雜)
有沒有像dev.hold
這樣的選項我們可以發送到第一個塊?
您可以考慮使用recordPlot
---
output: html_document
---
```{r first}
plot(1:10, 1:10, xaxt = "n")
x<-recordPlot()
```
Look, no x axis!
```{r second}
replayPlot(x)
axis(side = 1, at = 1:10)
```
來源:
https://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/recordplot.html < - 請注意關於ggplot2的免責聲明
您可以設置選項global.device
來打開持久性圖形設備:
---
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_knit$set(global.device = TRUE)
```
```{r first}
plot(1:10, 1:10, xaxt = "n")
```
Look, no x axis!
```{r second}
axis(side = 1, at = 1:10)
```
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.