我正在尝试在 RStudio的( https://plot.ly/javascript/click-events/ )上重新创建名为“在单击事件上创建注释”的示例。在我的尝试中,我想出了以下在 RStudio 中使用的定制代码:
library(plotly)
trace_0 <- rnorm(100, mean = 5)
trace_1 <- rnorm(100, mean = 0)
trace_2 <- rnorm(100, mean = -5)
x <- c(1:100)
data <- data.frame(x, trace_0, trace_1, trace_2)
data %>% plot_ly(x = ~x, y = ~trace_0, name = 'trace 0', type = 'scatter', mode = 'lines') %>%
layout(hovermode = "closest", showlegend = FALSE) %>%
onRender("
function(el, x) {
var myGraph = document.getElementById(el.id);
el.on('plotly_click', function(e) {
var pts = '';
for(var i=0; i < e.points.length; i++){
annotate_text = 'x = '+e.points[i].x +
'y = '+e.points[i].y.toPrecision(4);
annotation = {
text: annotate_text,
x: e.points[i].x,
y: parseFloat(e.points[i].y.toPrecision(4))
}
annotations = self.layout.annotations || [];
annotations.push(annotation);
Plotly.relayout('myGraph',{annotations: annotations})
}
}
")
在 RStudio 中运行我的代码后,我确实在绘图查看器中看到了交互式绘图图像,但是我无法创建与它交互时应该出现的任何注释(如在线教程中)。
我的问题是两部分。
1)我试图弄清楚如何解决和解决这个特定问题。
2) 我试图更好地理解如何对嵌入在 htmlwidgets 的 onRender() 函数中的 Javascript 代码进行故障排除。是否可以逐行运行此代码并说创建变量“pts”并查看它在通过循环时如何更新,并查看当我单击某些点时注释变量如何变化?如果无法通过这种方式进行故障排除,我担心为我正在开发的交互式绘图定制 onRender() 会很困难。我相信可以在 Web 浏览器中对 Javascript 进行故障排除,但我不清楚如何使用这个特定的 Javascript 代码(嵌入在 R 中)来解决问题。
感谢您的任何建议!
编辑:
考虑到@bethanyP 的一些建议,我尝试了以下方法:
1) 制作了以下格式的 .Rmd 文件:
---
title: "annotePlot"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r makePlot}
########### Ex: Change scatterplot opacity ###########
# Supposed to keep clicked point black, but it turns all gray
set.seed(1)
(Rest of code in here)
````
2) Ran rmarkdown::render("annotate.Rmd") 制作 .html 文件
3) 在 Chrome 中打开 URL (file:///Users/user1835/annotate.html)
4)注意到交互图已经在网页底部创建。我可以与之交互(如果我单击一个点,所有点都会从黑色变为灰色)
5) 点击 Chrome 右上角的图标 --> 更多工具 --> 开发者工具
在这一点上,我不确定如何使用可用的工具来解决问题。我的 Chrome 浏览器中有如下内容(见图):
当我点击图表中的一个点时,我看到标签突出显示。但是,我无法看到有关单个对象(例如 e)的更多信息。我不确定我怎么会知道对象 e 有一个称为点的子对象。此外,我不确定当用户单击某个点时如何查看哪些对象更新(以及更新方式)。我有可能看到这样的事情吗?我相信我需要了解对象并了解它们在交互时如何变化。
任何意见是极大的赞赏!