簡體   English   中英

R-如果滿足條件,則在Plotly中添加跟蹤

[英]R - Add trace in Plotly if condition is met

我正在創建一個散點圖,如果滿足條件,我希望通過跡線連接點。 我的數據分為多個序列,如果X和Y坐標是同一序列的一部分,我希望有一個軌跡。 我的示例數據和代碼段如下。

樣本數據:

X   Y   Seq
1   3    1
2   5    1
1   4    1
3   1    2
4   5    2
6   3    3
3   4    3

在此示例中,我希望跟蹤點(1、3),(2、5),(1、4),跟蹤點(3、1),(4、5)和點(6、3),(3 ,4)追蹤。 如果有新的序列開始,則跟蹤中應該有一個中斷。

碼:

 plot_ly (data, x = data$X , y = data$Y,
          type = "scatter", 
          mode="markers")%>%
          add_trace(data$Seq==shift(data$Seq, type="lag"), mode="lines")

這是我的實際數據給我的情節圖。 您可以看到正在繪制點,但沒有中斷。 跟蹤

問題在於您使用add_trace 當此參數需要現有的繪圖/軌跡時,您add_trace我假設的數據子集傳遞給add_trace的第一個參數。 問題是,由於要使用%>%進行傳遞,因此該函數將繼承原始數據,而忽略您的子集。

請注意,即使我的變量NO與該圖無關,以下內容也會給出相同的圖:

X=c(1,2,1,3,4,6,3)
Y=c(3,5,4,1,5,3,4)
seq=c(1,1,1,2,2,3,3)
dataX <- data.frame(X,Y,seq)

NO <- "this won't work"
plot_ly plot_ly (dataX, x = dataX$X , y = dataX$Y,
         type = "scatter", 
         mode="markers") %>%
          add_trace(NO, mode="lines")

在此處輸入圖片說明

你可以解決這個inherit=F ,但隨后它不會工作,因為add_trace試圖添加一些情節NO這是不是一個陰謀(和你的子集將不會工作)

plot_ly (dataX, x = dataX$X , y = dataX$Y,
         type = "scatter", 
         mode="markers") %>%
  add_trace(NO, mode="lines", inherit=FALSE)

## No trace type specified: 

添加跟蹤時,您希望在x=y=明確顯示。 然后,您可以允許它自動繼承上一個圖/跡線,或指定一個。 至於您要執行的操作,可以使用循環來構建它:

#make the plot
p <- plot_ly (dataX, x = dataX$X , y = dataX$Y,
         type = "scatter", 
         mode="markers")

#build it up
for(i in levels(factor(dataX$seq))){
  #subset data
  dataFilt <- dataX[dataX$seq==i,]
  #add it
  p <- add_trace(p, x=dataFilt$X, y=dataFilt$Y,mode="lines",color ='yellow')
}
p

在此處輸入圖片說明

每次都會制作一個新系列,因此需要一些工作。 您可以隱藏圖例,它看起來正確:

p %>%
  layout(showlegend = FALSE)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM