Luc
Luc

Reputation: 958

R plotly Issues with hovering text in a trace loop

Following this post and this answer I have an additional question:

library(plotly)      

# Create data
dat=data.frame(group = factor(rep(LETTERS[1:4], each=10)), my_x = rep(1:10, 4), my_y = rnorm(40))
str(dat)

# Let's do a first plot
p<-plot_ly(dat)


# Add a trace for each group using a loop

for(i in 1:length(levels(dat$group))){

subs <- subset(dat, group == levels(dat$group)[i])

p<-add_trace(p = p,
             data = subs,
             y=~my_y, 
             x=~my_x , 
             name=levels(dat$group)[i],
             type="scatter", 
             mode="markers+lines",
             hoverinfo="text",
             text=~paste0(levels(dat$group)[i], ": x=", round(my_x, 2), "y=", round(my_y, 2)))

}

p

Can anybody tell me why it is that when I hover over the data points, each of the labels shows the correct x and y values, however, they are all labelled as 'D:', while the legend shows the lines resemble A, B, C & D. I would like the hover text to be labeled correctly.

Upvotes: 2

Views: 499

Answers (1)

akrun
akrun

Reputation: 887118

It could be an issue with the use of ~ in text. Try by creating the 'text' using the 'subs' data separately and then pass it on the add_trace

 p <- plot_ly()
 lvls <- levels(dat$group)
 for(i in seq_along(lvls)){
   subs <- droplevels(subset(dat, group == lvls[i]))
   text1 <- with(subs, paste0(lvls[i], ": x=", round(my_x, 2), "y=", round(my_y, 2)))
   p <- add_trace(p, 
                  data = subs,
                  x = ~my_x, 
                  y = ~my_y,
                  name = lvls[i],                  
                  type = 'scatter', 
                  mode = 'markers+lines', 
                  hoverinfo='text',
                  text=text1)
 }

 p

-output enter image description here

Upvotes: 2

Related Questions