查看悬停信息以了解Plotly R中重叠的散点

时间:2019-03-20 00:19:46

标签: r plotly

我很惊讶,我无法用谷歌搜索该解决方案,所以我以为我会发帖。当然其他人也有同样的问题...

我遇到的问题是,当两个或多个散布点重叠时(即相同的x和y),悬停信息仅显示顶部的信息。

示例:

df <- data.frame(ID=1:6, x=c(5:9, 7), y=c(1:5, 3)+10, info=paste('Hover information: ',c(LETTERS[c(1:6)])))
df                 

plot_ly(df) %>% 
  add_trace(x = ~x, 
            y = ~y, 
            type = 'scatter', 
            mode = 'markers', 
            marker = list(color   = 1:6, 
                          symbol  = 1:6, 
                          size    = 25),
            hoverinfo = "text",
            text = df$info)

是否可以使hoverinfo都出现在中间点?可能是:

Hover information: C
Hover information: F

1 个答案:

答案 0 :(得分:1)

您可以尝试使用add_markers()和抖动,例如:

plot_ly(df) %>% 
  add_markers(x = ~jitter(x, 1), 
              y = ~jitter(y, 1), 
              type = 'scatter', 
              mode = 'markers', 
              marker = list(color   = 1:6, 
                            symbol  = 1:6, 
                            size    = 25),
              hoverinfo = "text",
              text =  ~info)

但是要获得您设计的多种信息,也许您需要修改数据框(但会丢失颜色代码):

df$info <- as.character(df$info)

df$combined_info[1] <- df$info[1]

for(i in 2:nrow(df)){
  df$combined_info[i] <- df$info[i]

  for(j in 2:i-1){
    if((df$x[j] == df$x[i]) && (df$y[j] == df$y[i])){
      df$combined_info[i] <- paste0(df$combined_info[j], "<br>",
                                    df$info[i])
    }
  }
}

然后您可以使用原始的plotly代码,同时更改“ text”参数:

plot_ly(df) %>% 
  add_trace(x = ~x, 
    ...
    text =  ~combined_info)