我试图复制this个简单的绘图,显示数据点悬停上的图像.代码是here.
然而,我无法复制它.这就是我目前的情况:
library(htmlwidgets)
library(magrittr)
library(plotly)
js <- "
function(el) {
var tooltip = Plotly.d3.select('#' + el.id + ' .svg-container')
.append(\"div\")
.attr(\"class\", \"my-custom-tooltip\");
el.on('plotly_hover', function(d) {
var pt = d.points[0];
// Choose a location (on the data scale) to place the image
// Here I'm picking the top-left corner of the graph
var x = pt.xaxis.range[0];
var y = pt.yaxis.range[1];
// Transform the data scale to the pixel scale
var xPixel = pt.xaxis.l2p(x) + pt.xaxis._offset;
var yPixel = pt.yaxis.l2p(y) + pt.yaxis._offset;
// Insert the base64 encoded image
var img = \"<img src='\" + pt.customdata + \"' width=100>\";
tooltip.html(img)
.style(\"position\", \"absolute\")
.style(\"left\", xPixel + \"px\")
.style(\"top\", yPixel + \"px\");
// Fade in the image
tooltip.transition()
.duration(300)
.style(\"opacity\", 1);
});
el.on('plotly_unhover', function(d) {
// Fade out the image
tooltip.transition()
.duration(500)
.style(\"opacity\", 0);
});
};
"
x <- 1:3
y <- 1:3
artists <- c("Bethoven", "Mozart", "Bach")
image_links <- c(
"https://upload.wikimedia.org/wikipedia/commons/6/6f/Beethoven.jpg",
"https://upload.wikimedia.org/wikipedia/commons/4/47/Croce-Mozart-Detail.jpg",
"https://upload.wikimedia.org/wikipedia/commons/6/6a/Johann_Sebastian_Bach.jpg"
)
# hoverinfo = "none" will hide the plotly.js tooltip, but the
# plotly_hover event will still fire
plot_ly(hoverinfo = "none") %>%
add_text(x = x, y = y, customdata = image_links, text = artists) %>%
htmlwidgets::onRender(js)
悬停时不会发生任何事情,控制台将抛出以下错误:
htmlwidgets.js:261 Uncaught SyntaxError: Unexpected token ';'
at tryEval (htmlwidgets.js:252:32)
at htmlwidgets.js:236:24
at Array.forEach (<anonymous>)
at forEach (htmlwidgets.js:55:14)
at evalAndRun (htmlwidgets.js:230:7)
at htmlwidgets.js:654:11
at Array.forEach (<anonymous>)
at forEach (htmlwidgets.js:55:14)
at htmlwidgets.js:576:7
at Array.forEach (<anonymous>)
我做错了什么?
此外,在悬停状态下显示图像时,是否可以显示工具提示(如text
中定义的)?