R在跟踪循环中将文本悬停时的Rallyly问题

时间:2019-01-04 04:52:25

标签: r hover plotly

this postthis answer之后,我还有一个问题:

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

有人可以告诉我为什么当我将鼠标悬停在数据点上时,每个标签都显示正确的x和y值,但是它们都标记为“ D:”,而图例显示的线条类似于A,B,C和D。我希望将悬停文本正确标记。

1 个答案:

答案 0 :(得分:1)

~中使用text可能是一个问题。尝试通过分别使用“ subs”数据创建“文本”,然后将其传递到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

-输出 enter image description here