在绘图R图表上的自定义hoverinfo文本是否不同于'text'参数? [英] Custom hoverinfo text on plotly R chart that is different to the 'text' parameter?

查看:110
本文介绍了在绘图R图表上的自定义hoverinfo文本是否不同于'text'参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试使用plotly R库创建网络图.我想可视化一个自定义的hoverinfo文本,该文本与为标记(在这种情况下为节点)定义的文本标签不同.

I have been trying to create a network graph with the plotly R library. I would like to visualize a custom hoverinfo text that is different from the text label defined for the markers (or nodes in this case).

基本上,我想将文本标签保留在标记(节点)上,但仍要为hoverinfo提供自定义文本. 如我所愿,工具提示将显示其他一些与标记的标签文本不同的字符向量.例如,当我将鼠标悬停在宫本茂"的中央节点上时,我希望工具提示显示我可能收集的其他信息(例如,类型,国籍等).从可打印的文档中我了解到,当前您只能为标记和hoverinfo工具提示显示相同的文本标签.

Basically, I would like to keep the text labels on the markers (nodes) as they are currently but also be able to provide custom text for the hoverinfo. As in I would like the tooltip to display some other character vector different from the marker's label text. For instance, when I hover on the central 'Shigeru Miyamoto' node, I would like to tooltip to display other information that I may collect (eg. type, nationality etc). My understanding from the plotly documentation is that currently you can only display the same text label for both the markers and the hoverinfo tooltip.

有没有办法做到这一点?

Is there a way to accomplish this?

这是我使用的代码:

library(plotly)
library(igraph)
library(dplyr)

A <- data.frame(A=rep("Shigeru Miyamoto",10))

B <- data.frame(B=c("Ninendo Company Ltd","Super Mario Bros","Mario", "Gamespot","Time Magazine","Wii","DOnkey Kong Jr","Mario Kart","Japan","Mario Party"))

edgelist <- bind_cols(A,B)

graph <- graph_from_data_frame(edgelist)
L <- layout_nicely(graph)
vs <- V(graph)
es <- as.data.frame(get.edgelist(graph))
Ne <- length(es[1]$V1)
Xn <- L[,1]
Yn <- L[,2]

txt <- list(
        family = "calibri",
        size = 15,
        color = "white",
        opacity = 1
)

size = c(20,rep(5,length(vs)-1))


network <- plot_ly(type = "scatter", x = Xn, y = Yn, mode = "markers+text", 
                   text = names(vs), hoverinfo = "text",marker=list(size=size,color='5BC0DE'), textfont = txt

)


edge_shapes <- list()
for(i in 1:Ne) {
        v0 <- es[i,]$V1
        v1 <- es[i,]$V2

        edge_shape = list(
                type = "line",
                line = list(color = "DF691A", width = 1),
                x0 = Xn[match(v0,names(vs))],
                y0 = Yn[match(v0,names(vs))],
                x1 = Xn[match(v1,names(vs))],
                y1 = Yn[match(v1,names(vs))],
                opacity = 0.3
        )

        edge_shapes[[i]] <- edge_shape}

network <- layout(
        network,
        paper_bgcolor="#4e5d6c",
        plot_bgcolor="#4e5d6c",
        hovermode = "closest",
        title = paste("Miyamoto's Relations",sep = ""),
        titlefont=list(color="white"),
        shapes = edge_shapes,
        xaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE, zeroline = FALSE),
        yaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE, zeroline = FALSE)


)


network

推荐答案

在进一步研究中,我认为我发现了使用annotations的潜在解决方案.该想法是隐藏markers中的文本,而不是使用annotations作为节点标签.这样,您可以为hoverinfo工具提示文本包括任何任意字符向量.

Upon further research, I think I found a potential solution by using annotations.The idea is to hide the text from the markersand instead use annotations for the node labels. This way you can include any arbitrary character vector for the hoverinfo tooltip texts.

hover_text <- rep('Game Designer/Mario Creator',11)

size = c(100,rep(40,length(vs)-1))


network <- plot_ly(type = "scatter", x = Xn, y = Yn, mode = "markers", 
                   text = hover_text, hoverinfo = "text",marker=list(size=size,color='5BC0DE')

)

edge_shapes <- list()
for(i in 1:Ne) {
        v0 <- es[i,]$V1
        v1 <- es[i,]$V2

        edge_shape = list(
                type = "line",
                line = list(color = "DF691A", width = 1),
                x0 = Xn[match(v0,names(vs))],
                y0 = Yn[match(v0,names(vs))],
                x1 = Xn[match(v1,names(vs))],
                y1 = Yn[match(v1,names(vs))],
                opacity = 0.3
        )

        edge_shapes[[i]] <- edge_shape}

network <- layout(
        network,
        paper_bgcolor="#4e5d6c",
        plot_bgcolor="#4e5d6c",
        hovermode = "closest",
        title = paste("Miyamoto's Relations",sep = ""),
        titlefont=list(color="white"),
        shapes = edge_shapes,
        xaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE, zeroline = FALSE),
        yaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE, zeroline = FALSE),
        annotations=list(x = Xn,
                y = Yn,
                text = names(vs),
                xref = "x",
                yref = "y",
                showarrow = F,
                font=list(family = "calibri",
                          size = 15,
                          color = "white",
                          opacity = 1))
        )


network

这篇关于在绘图R图表上的自定义hoverinfo文本是否不同于'text'参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆