Как исправить тип печати, чтобы сохранить заданную цветовую схему для разброса типов? - PullRequest
0 голосов
/ 28 января 2019

Плотно игнорирует мою заданную цветовую схему при использовании type = "scatter", но сохраняет ее при использовании type = NULL, даже если цветовая схема не установлена ​​до следующего кода.

Попытки использовать mode = "маркеры" или mode = "линии" или mode = "линии + маркеры" приводят к созданию нескольких строк.

Я понимаю, что mtcars - странный набор данных для добавления предупреждений и времени для этого примера кода, но он точно показывает проблему.Я исправил код, и он находится в производстве с type = NULL, но имея точную догадку, тип печати кажется нестабильным (и в некоторых случаях он принимает гистограмму).

Если я использую type = NULL в Разделе 1, тогда я получаю правильную цветовую схему (красный, желтый, зеленый).

если я использую type = "scatter", тогда он использует другую цветовую схему.Если я использую type = "scatter", mode = "lines + markers", он также использует другую цветовую схему.

Когда ось x имеет положительные значения или даты, то она, по крайней мере, остается как одна линия с разными цветными точками.Но поскольку я полагался на type = NULL, чтобы получить правильную цветовую схему, в зависимости от класса компонента времени, он может принимать гистограмму или создавать несколько строк (по одной на каждое предупреждение).

library(plotly)

pal <- c("red","yellow","green4")

pal <- setNames(pal,c("Serious","Moderate","Low"))

x = NULL
for(i in 2007:2009){
for(j in 1:12)
x <- c(x, paste(i,j,"01",sep="-"))
}
x <- x[1:nrow(mtcars)]
x <-as.Date(x)
y <-  as.POSIXct(x)

set.seed(4) 

mtcars$alert <- sample(c("Serious","Moderate","Low"),size = 
nrow(mtcars),replace = TRUE)
mtcars$date  <- x 
mtcars$posixct  <- y  

#' Section 1 
p <- plot_ly(mtcars, width = 800, 
         height = 600, type = NULL # must be made null
         #' for some reason using any other type (i.e. scatter) 
         #' results in multiple traces for each factor (i.e. when you color 
         #' by the alert, multiple lines are created.) OR results in the colors being ignored
         #' The only current workaround is for plot_ly to assume scatter 
         #' in which case it does not separate the values into new traces and keeps the set colors. 
         #' in ggplot you can use geom_point() and geom_line() to layer the 
         #' graphics, but this is not possible in plot_ly. 
         ) %>% 

#' Section 2 
  add_markers(x=~posixct, y=~wt, mode = "markers",color =~alert, colors = pal, 
          marker =list(size = 10)) %>%
add_trace(x=~posixct,y=~wt,mode = 'line',
        line = list(color = 'rgb(0, 0, 0)', width = 2), showlegend=FALSE) 

p <- p %>% layout(
  xaxis = list(title = "Time"),
  yaxis = list(title = "weight"),    
  title = "weight over index as a time", titlefont = list(size = 20),
  margin = list(l = 50, r = 50, t = 50, b = 50),
  showlegend = TRUE,legend = list(traceorder = "reversed")
)


config(p,collaborate = FALSE,cloud = FALSE,displaylogo = FALSE, 
   modeBarButtonsToRemove = c("zoom2d","pan2d","select2d","lasso2d",
                              "zoomIn2d","zoomOut2d","autoScale2d",

"hoverCompareCartesian","toggleHover","toggleSpikelines"))
...