【发布时间】:2016-12-21 16:30:05
【问题描述】:
我想创建一个线段或矩形的交互式图形,这样当用户将鼠标悬停在其上时,每个线段或矩形都会提供不同的信息。我查看了htmlwidgets showcase,我认为 plotly 看起来很有希望。 (我对其他与 R 相关的方法持开放态度。)
下面是一个简单的例子。我可以创建提供悬停信息的端点(t1 和 t2)的图。但我希望在用户将鼠标悬停在两个端点之间的空间上时出现悬停信息)。
我可以使用add_trace() 添加一条线段,但我无法让悬停工作。如果我添加第二条线段,我会收到一条错误消息:
Error in plot_ly(data = mydat, x = t2, y = y, mode = "markers", hoverinfo = "text", :
requires numeric/complex matrix/vector arguments
我可以使用 layout() 添加矩形,但同样,我无法让悬停工作。
如果有人建议一种方法让悬停参数适用于任何一种方法,我也欢迎有关如何为大量线段/矩形编码的建议(不仅仅是这个简单示例中的 2 个) .
有什么建议吗?
mydat <- data.frame(t1=c(1, 3), t2=c(4, 5), y=c(1, 2), task=c("this", "that"))
library(plotly)
# attempt with one line segment - hover doesn't work
plot_ly(data=mydat, x=t2, y=y, mode="markers",
hoverinfo="text", text=task) %>%
add_trace(data=mydat, x=t1, y=y, mode="markers",
hoverinfo="text", text=task) %>%
add_trace(
x=c(mydat$t1[1], mydat$t2[1]), y=c(mydat$y[1], mydat$y[1]),
mode="lines", hoverinfo="text", text=mydat$task[1])
# attempt with both line segments -
# Error in plot_ly, requires numeric/complex matrix/vector arguments
plot_ly(data=mydat, x=t2, y=y, mode="markers",
hoverinfo="text", text=task) %>%
add_trace(data=mydat, x=t1, y=y, mode="markers",
hoverinfo="text", text=task) %>%
add_trace(
x=c(mydat$t1[1], mydat$t2[1]), y=c(mydat$y[1], mydat$y[1]),
mode="lines", hoverinfo="text", text=mydat$task[1]) %*%
add_trace(
x=c(mydat$t1[2], mydat$t2[2]), y=c(mydat$y[2], mydat$y[2]),
mode="lines", hoverinfo="text", text=mydat$task[2])
# attempt with rectangles - hover doesn't work
plot_ly(data=mydat, x=t2, y=y, mode="markers",
hoverinfo="text", text=task) %>%
add_trace(data=mydat, x=t1, y=y, mode="markers",
hoverinfo="text", text=task) %>%
layout(shapes=list(
list(type="rect", x0=mydat$t1[1], x1=mydat$t2[1], xref="x",
y0=mydat$y[1], y1=mydat$y[1]+0.1, yref="y",
hoverinfo="text", text=mydat$task[1]),
list(type="rect", x0=mydat$t1[2], x1=mydat$t2[2], xref="x",
y0=mydat$y[2], y1=mydat$y[2]+0.1, yref="y",
hoverinfo="text", text=mydat$task[2])
))
【问题讨论】: