您可以设置行相同的颜色像这样
plot_ly(df, x = type, y = values, group = id, type = 'scatter', mode = 'lines+markers',
line=list(color='#000000'), showlegend = FALSE)
对于“奖金”二为价格 - 的 - 一个问题“如何通过颜色用于分组'的不同变量::
如果您只绘制标记并且没有线条,这将很简单,因为您可以简单地向marker.color
提供颜色矢量。然而,不幸的是,line.color
只接受一个值,而不是一个向量,所以我们需要解决这个限制。
如果数据不是太多(在这种情况下,此方法变慢,并且下面会给出更快的方法),您可以逐个设置每条线的颜色,将它们逐个添加为一个循环遍历ID)
p <- plot_ly()
for (id in df$id) {
col <- c('#AA0000','#0000AA')[df[which(df$id==id),3][1]+1] # calculate color for this line based on the 3rd column of df (df$state).
p <- add_trace(data=df[which(df$id==id),], x=type, y=values, type='scatter', mode='markers+lines',
marker=list(color=col),
line=list(color=col),
showlegend = FALSE,
evaluate=T)
}
p
虽然这一次跟踪每行的做法可能是概念上最简单的方法,如果应用到数百或数千线段的它变得非常(不切实际)慢。在这种情况下,有一种更快的方法,即每个颜色只绘制一条线,但是通过在单独的线段之间插入NA
并使用connectgaps=FALSE
选项将线划分为多个线段缺少数据。
通过使用dplyr
插入线链段之间的缺失值(即,对于每个唯一的id
我们添加包含在提供x
和y
坐标列NA
的行)开始。
library(dplyr)
df %<>% distinct(id) %>%
`[<-`(,c(2,4),NA) %>%
rbind(df) %>%
arrange (id)
和情节,使用connectgaps=FALSE
:
plot_ly(df, x = type, y = values, group = state, type = 'scatter', mode = 'lines+markers',
showlegend = FALSE,
connectgaps=FALSE)
就这个问题寻找一种方式来绘制多行与一个plotly命令绊倒了。在当前的plotly-package(4.7.1)中,需要'plot_ly(df,x =〜type,y =〜values,type ='scatter',mode ='lines',split =〜id)%>% layout (showlegend = FALSE)'使这个例子工作。 – 5th