Просмотр информации о наведении для перекрывающихся точек рассеяния в Plotly R - PullRequest
0 голосов
/ 20 марта 2019

Я был удивлен, что не смог найти это решение в Google, поэтому подумал, что выложу сообщение.Конечно, у других есть такая же проблема ...

У меня есть проблема в том, что когда две или более точек разброса перекрываются (то есть те же самые 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 Ответ

1 голос
/ 20 марта 2019

Вы можете попробовать использовать 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])
    }
  }
}

И затем вы можете использовать исходный код сюжета при изменении аргумента «текст»:

plot_ly(df) %>% 
  add_trace(x = ~x, 
    ...
    text =  ~combined_info)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...