r - 在 for 循环中绘制图表

标签 r knitr plotly

我正在使用 plotly 转换 ggplot2 图表并将它们放入 knitr html 输出中。
这是报告的工作副本。
http://rpubs.com/kausti/NSEFO-23-Mar-2016
第一个图表是 plotly 图表,下面的不是。我希望它们是 plotly 图,但我被卡住了。

在下面的代码中,plotChart 函数返回一个 ggplot2 图。此代码有效!

for (tick in tradeOps$ticker)
{
  tmpDF = filter(tradeOps, ticker == tick)
  p = plotChart(tick = tick,Entry = tmpDF$Entry, Target =     tmpDF$Target, SL= tmpDF$SL, TradeType = tmpDF$TradeType, data = wd)
  p = p + annotate("text", x = as.Date(tmpDF$Date)+30, y =   tmpDF$Entry, label = tmpDF$Entry, colour = "blue")
  p = p + annotate("text", x = as.Date(tmpDF$Date)+30, y = tmpDF$Target, label = tmpDF$Target)
  p = p + annotate("text", x = as.Date(tmpDF$Date)+30, y = tmpDF$SL, label = tmpDF$SL)

  print(p)

}

现在,如果我将最后一个打印语句更改为 print(ggplotly(p))它只是不会在 html 中打印图表。
该代码在 knitr 之外完美运行。

另外,print(ggplotly(p))在循环外完美工作。
我错过了什么吗?

编辑:

包括下面的可重现示例。
以下是我的 rmd 文件。
---
title: "tmp"
output: html_document
---

```{r, echo=FALSE, message=FALSE, fig.width=8, fig.height=6}
library(ggplot2)
library(plotly)
library(dplyr)
s = NULL
a = data.frame(id = 1:15,x = 2:16, y = 15:1, z = c(rep("a",5),rep("b",5),rep("c",5)))
for(i in unique(a$z)){
  s = a[a$z == i,]
  print(ggplot(s,aes(x = x, y = y)) + geom_point())
}

```

这与显示三个图形的输出 html 完美配合。
现在,只需将最后一个打印语句更改为print(ggplotly(ggplot(s,aes(x = x, y = y)) + geom_point()))产生一个没有任何错误的空白 html。

在终端中运行相同的代码虽然完美
library(ggplot2)
library(plotly)
library(dplyr)
s = NULL
a = data.frame(id = 1:15,x = 2:16, y = 15:1, z = c(rep("a",5),rep("b",5),rep("c",5)))
for(i in unique(a$z)){
  s = a[a$z == i,]
  print(ggplotly(ggplot(s,aes(x = x, y = y)) + geom_point()))
}

感谢任何帮助。

谢谢,
考斯图布

最佳答案

原来问题在这里解决了
https://github.com/ropensci/plotly/issues/273

knitr 在循环打印图表时存在已知问题。
从这里引用最终答案 cpsievert

```{r}
l <- htmltools::tagList()
for (i in 1:3) {
  l[[i]] <- as.widget(plot_ly(x = rnorm(10)))
}
l
```

这解决了我的问题。尽管在找到这个解决方案之前,我最终将所有内容从 ggplot2 移植到了 Plotly R api。

MLavoie,感谢您的帮助。我生成了一个虚拟数据集只是为了创建一个可重现的示例。尽管您的解决方案可能解决了虚拟示例,但在当前问题中与我无关。我认为这里提供的解决方案应该是通用的。

谢谢,
考斯图布

关于r - 在 for 循环中绘制图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36234169/

相关文章:

knitr - Jupyter 中的 R-markdown .Rmd 或 knitr markdown

r - 总结 3 个独特领域的最新分数

r - 包测试时出现意外输入

R foreach 问题(某些进程返回 NULL)

r - Kable 不再打印字幕

带有 kable 和 longtable 的 R Markdown 表格标题宽度

python - Plotly:如何创建奇数个子图?

javascript - plotly 更新数据

javascript - 使用 Plotly.update() 更新轨迹的 ‘x’ 和 ‘y’ 值

r - 根据组的第一行对组中的每一行进行变异