Custom hoverinfo text on plotly R chart that is different to the 'text' parameter? [closed]

回眸只為那壹抹淺笑 提交于 2019-12-20 02:26:05

问题


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).

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?

Here's the code I used:

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


回答1:


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



来源:https://stackoverflow.com/questions/42170476/custom-hoverinfo-text-on-plotly-r-chart-that-is-different-to-the-text-paramete

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!