2017-07-19 1 views
3

私はプロットライングラフをプロットしており、マーカー(データフレーム内の別の列がNAでない)を使用してライングラフ上の特定のポイントをハイライトしたい。さらに、私がプロットの上にマウスを置くと、私はマーカポイント上にあるときにy値を見たいだけで、プロットの残りの部分ではありません。プロットライングラフの特定のポイントにマーカーを追加する

は、ここで再現性の一例であり、私は今のところこれをやろうとしている中だAVE場所:

library(plotly) 
library(dplyr) 

data <- data.frame(x = c(1:100), 
       random_y = rnorm(100, mean = 0), 
       variable = sample(c('a', 'b', 'c'), 100, replace = TRUE), 
       point = sample(c(1, rep(NA, 4)),100, replace = TRUE)) 

p <- plot_ly(data, x = ~x, y = ~random_y, type = 'scatter', mode = 'lines', color = ~variable, hoverinfo = 'none') %>% 
add_trace(data = filter(data, !is.na(point)), color = ~variable, mode = 'markers', 
      x = ~x, y = ~random_y, hoverinfo = 'y') 

これは私が後だものを生成するが、問題は伝説です。これは、線とマーカープロットの両方の凡例を示します。

プロットの1つにshowlegend = Fを置くことができましたが、問題点は、凡例の変数をクリックすると、トレースが適切に分離されないことです。つまり、凡例aをクリックすると、aの線グラフとマーカーが表示されます。

答えて

2

ループを使用して、変数のデータフレームにフィルタを追加し、その行にトレースを追加することができます。マーカー。両方のトレースはlegendgroup

enter image description here

library(plotly) 
library(dplyr) 

data <- data.frame(x = c(1:100), 
        random_y = rnorm(100, mean = 0), 
        variable = sample(c('a', 'b', 'c'), 100, replace = TRUE), 
        point = sample(c(1, rep(NA, 4)),100, replace = TRUE)) 

p <- plot_ly(type = 'scatter', mode = 'lines') 
for (i in levels(data$variable)) { 
    print(i) 
    p <- add_trace(p, 
       data = data[data$variable == i,], 
       legendgroup = i, 
       x = ~x, 
       y = ~random_y, 
       type = 'scatter', 
       mode = 'lines', 
       color = ~variable, 
       hoverinfo = 'none' 
) 
    p <- add_trace(p, 
       data = data[(data$variable == i) & (!is.na(data$point)),], 
       legendgroup = i, 
       showlegend = F, 
       color = ~variable, 
       mode = 'markers', 
       x = ~x, 
       y = ~random_y, 
       hoverinfo = 'y') 
} 

p 
介してグループ化されています
関連する問題