有没有办法用 R 在工具提示中嵌入 html 代码?
Is there a way to embed html code inside tooltips in plotly with R?
我想在 plotly 的悬停工具提示中嵌入 html 代码。
这是一个工作示例:
plotly::plot_ly(
type = "pie",
labels = "A",
hovertext = '<i>text in italics</i>', # Renders text in italics
hoverinfo = "text"
)
通过将文本呈现为斜体,这个 reprex 似乎工作得很好。然而,更复杂的 html 代码似乎无法呈现为 html,而是呈现为纯文本。
在我的例子中,我想要的是在工具提示中嵌入一个图像,如下所示:
plotly::plot_ly(
type = "pie",
labels = "A",
hovertext = '<img src="https://cran.r-project.org/Rlogo.svg">', # Does not render as html
hoverinfo = "text"
)
我尝试将其他一些值用于 hovertext
(或 text
,就此而言两者的工作原理相同):
呈现为纯文本的值:
'<div><i>text in italics</i></div>'
'<div><img src="https://cran.r-project.org/Rlogo.svg"></div>',
'<img src="https://cran.r-project.org/Rlogo.svg">',
htmltools::HTML('<img src="https://cran.r-project.org/Rlogo.svg">'),
htmltools::HTML('<div><img src="https://cran.r-project.org/Rlogo.svg"></div>'),
可以肯定的是,第一个呈现为“
斜体文本”(斜体可以)
使工具提示根本不起作用的值:
htmltools::img(src="https://cran.r-project.org/Rlogo.svg")
htmltools::div(htmltools::img(src="https://cran.r-project.org/Rlogo.svg"))
htmltools::div('<img src="https://cran.r-project.org/Rlogo.svg">')
相关帖子和可能的解决方案:
Hover Events with JavaScript in R 至少可以部分解决问题(我可以使用更改的图像而不是显示工具提示);但是,此页面似乎已过时。另外,我不明白 javascript 代码是如何嵌入的。
也给出了一些可能有用的想法。但是,我的代码必须生成静态 html 输出,所以我不能依赖 Shiny。
用于 d3heatmap,如果我没记错的话,它是在 D3 上构建的。不过,我对 javascript 不是很熟悉,而且我不确定我能否很好地遵循他的代码,或者他的解决方案是否也适用于 plotly 工具提示。
如 所述,DT::datatable
有一个 escape
参数可以设置为 FALSE
,以避免转义数据中的 html 代码table,从而在 table 的 中正确呈现 html 代码 。据我所知,plotly 没有类似的东西。另外,我认为 datatables 不是建立在 D3 之上的(但我不是 100% 确定)。
关于如何解决这个问题有什么想法吗?非常感谢!
您不能将任意 HTML 例如 <div>
或 <code>
或 <img>
放入 hoverlabels 中,只是简单的格式化标签。
今天allowed tags in the source of Plotly.js是<br>
、<sub>
、<sup>
、<b>
、<i>
、<em>
我想在 plotly 的悬停工具提示中嵌入 html 代码。 这是一个工作示例:
plotly::plot_ly(
type = "pie",
labels = "A",
hovertext = '<i>text in italics</i>', # Renders text in italics
hoverinfo = "text"
)
通过将文本呈现为斜体,这个 reprex 似乎工作得很好。然而,更复杂的 html 代码似乎无法呈现为 html,而是呈现为纯文本。 在我的例子中,我想要的是在工具提示中嵌入一个图像,如下所示:
plotly::plot_ly(
type = "pie",
labels = "A",
hovertext = '<img src="https://cran.r-project.org/Rlogo.svg">', # Does not render as html
hoverinfo = "text"
)
我尝试将其他一些值用于 hovertext
(或 text
,就此而言两者的工作原理相同):
呈现为纯文本的值:
'<div><i>text in italics</i></div>'
'<div><img src="https://cran.r-project.org/Rlogo.svg"></div>',
'<img src="https://cran.r-project.org/Rlogo.svg">',
htmltools::HTML('<img src="https://cran.r-project.org/Rlogo.svg">'),
htmltools::HTML('<div><img src="https://cran.r-project.org/Rlogo.svg"></div>'),
可以肯定的是,第一个呈现为“
使工具提示根本不起作用的值:
htmltools::img(src="https://cran.r-project.org/Rlogo.svg")
htmltools::div(htmltools::img(src="https://cran.r-project.org/Rlogo.svg"))
htmltools::div('<img src="https://cran.r-project.org/Rlogo.svg">')
相关帖子和可能的解决方案:
Hover Events with JavaScript in R 至少可以部分解决问题(我可以使用更改的图像而不是显示工具提示);但是,此页面似乎已过时。另外,我不明白 javascript 代码是如何嵌入的。
如 DT::datatable
有一个 escape
参数可以设置为 FALSE
,以避免转义数据中的 html 代码table,从而在 table 的 中正确呈现 html 代码 。据我所知,plotly 没有类似的东西。另外,我认为 datatables 不是建立在 D3 之上的(但我不是 100% 确定)。
关于如何解决这个问题有什么想法吗?非常感谢!
您不能将任意 HTML 例如 <div>
或 <code>
或 <img>
放入 hoverlabels 中,只是简单的格式化标签。
今天allowed tags in the source of Plotly.js是<br>
、<sub>
、<sup>
、<b>
、<i>
、<em>