Plotly R 排序散点图图例条目

4
我以下面的方式创建一个情节:
## generate test data
getTestData <- function(seed_val=711, noise=1.0) {
    set.seed(seed_val)
    d <- seq(as.Date('2017/01/01'), as.Date('2017/01/08'), "days")
    first_name <- rep("Jane", 8)
    first_name <- append(first_name, rep("Fred", 8))
    first_name <- append(first_name, rep("Sally", 8))
    y1_vals <- seq(1, 3*8, 1)
    y2_vals <- rnorm(3*8, mean=y1_vals, sd=noise)
    dat <- data.frame(date=d, f_name=first_name, y1=y1_vals, y2=y2_vals,
                  stringsAsFactors = FALSE)
    return(dat)
}

dat <- getTestData()
library(dplyr)
library(plotly)
p1 <- plot_ly(dat, x=~date, y=~y1, color=~f_name,
              type = 'scatter', mode = "lines+markers") %>% 
    layout(yaxis = list(title = "some important y value")) %>% 
    add_trace(y=~y2, name='actual', showlegend=FALSE, 
              type='scatter', mode='lines',
              line=list(width = 2, dash = 'dash'), color=~f_name)

enter image description here

Plotly会按照f_name分组的字母顺序对图例进行排序,但我希望按照数据框中的原始顺序来排序:Jane,Fred,Sally
这里给出的被接受的答案: Plotly R order legend entries 在注释为#将sort参数设置为FALSE,现在的排序方式与数据框相同的部分非常适合我,但这个解决方法是针对饼图的。我需要重新排序我的散点图图例,但似乎没有可用于设置(像饼图一样)的sort参数。
2个回答

7

这是您想要的吗?

dat$f_name <- factor(dat$f_name, levels = c("Jane", "Fred", "Sally"))

plot_ly(dat, x=~date, y=~y1, color=~f_name,
    type = 'scatter', mode = "lines+markers") %>% 
        layout(yaxis = list(title = "some important y value")) %>% 
        add_trace(y=~y2, name='actual', showlegend=FALSE, 
          type='scatter', mode='lines',
          line=list(width = 2, dash = 'dash'), color=~f_name)

enter image description here


更改默认因子排序 - 应该想到了。谢谢! - Michael Szczepaniak

1

补充之前的回答,你还可以为名称选择颜色。请注意,我添加了Peter以显示如果出现Peter(不是这种情况),它的颜色将是灰色(我需要在shiny中选择颜色,并且我需要它们相同,无论它们是否出现,或者在出现的情况下)。

dat$f_name <- factor(dat$f_name, levels = c("Jane", "Fred", "Sally", "Peter"))
ccolors <- c('black', 'blue','red', 'gray')

plot_ly(dat, x=~date, y=~y1, color=~f_name, colors=ccolors,
    type = 'scatter', mode = "lines+markers") %>% 
        layout(yaxis = list(title = "some important y value")) %>% 
        add_trace(y=~y2, name='actual', showlegend=FALSE, 
          type='scatter', mode='lines',
          line=list(width = 2, dash = 'dash'), color=~f_name)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接