[英]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.