сюжетно подстрочные линии одного цвета

#r #colors #plotly #r-plotly #palette

Вопрос:

У меня есть некоторые данные временных рядов по нескольким категориям, где в каждой категории есть подмножество группы продуктов, и я хочу отобразить их в виде сюжетной подзаголовка, чтобы каждая линейка продуктов имела один и тот же цвет. Как мне это сделать?

Я попытался указать палитру в аргументе «цвета», который не сработал, и я также попытался expand_grid «дополнить» каждую категорию отсутствующими продуктами, но это также не сработало. И, наконец, я попробовал комбинацию обоих подходов, которая все еще не работала.

Ниже приведен игрушечный набор данных об этой проблеме. Как вы можете видеть в группе условных обозначений, строки для каждой категории окрашены по-разному.

 data <- expand_grid(Category = c(LETTERS[1:3]), Product = letters[1:5], date = seq.Date(as.Date("2020-01-01"), as.Date("2020-12-31"), by = 7)) %>% 
  mutate(y_value = rnorm(nrow(.), 50, 25)) %>% 
  filter(!paste0(Category, Product) %in% c("Ab","Bd","Ce","Ca"))

data %>% 
  group_by(Category) %>% 
  do(
    plot = plot_ly(data = ., x=~date, y = ~ y_value, color = ~Product, legendgroup = ~ Product) %>% 
      add_lines(hoverinfo = "text", text = ~ paste0("Category: ", Category, "<br>", "Product: ", Product)) %>% 
      add_annotations(text = ~Category, x = 0.5,y = ~ max(y_value), xref = "paper",showarrow = FALSE)
  ) %>% 
  subplot(nrows = 3, shareX = TRUE, shareY = FALSE)

 

введите описание изображения здесь

Ответ №1:

Вы можете использовать именованный вектор цветовых векторов для присвоения цветов вашим продуктам и передачи его в colors аргумент plot_ly типа так:

 library(plotly)
library(tidyr)

data <- expand_grid(Category = c(LETTERS[1:3]), Product = letters[1:5], date = seq.Date(as.Date("2020-01-01"), as.Date("2020-12-31"), by = 7)) %>% 
  mutate(y_value = rnorm(nrow(.), 50, 25)) %>% 
  filter(!paste0(Category, Product) %in% c("Ab","Bd","Ce","Ca"))

colors <- c("a" = "blue", "b" = "red", c = "green", d = "orange", e = "purple")
data %>% 
  group_by(Category) %>% 
  do(
    plot = plot_ly(data = ., x=~date, y = ~ y_value, color = ~Product, colors = colors, legendgroup = ~ Product) %>% 
      add_lines(hoverinfo = "text", text = ~ paste0("Category: ", Category, "<br>", "Product: ", Product)) %>% 
      add_annotations(text = ~Category, x = 0.5,y = ~ max(y_value), xref = "paper",showarrow = FALSE)
  ) %>% 
  subplot(nrows = 3, shareX = TRUE, shareY = FALSE)
 

введите описание изображения здесь

Комментарии:

1. Идеальный. работает как шарм и очень хорошо масштабируется внутри блестящего приложения

2. Пожалуйста. И если вы все еще нуждаетесь в цветовой палитре, то, возможно, это полезно: r-charts.com/color-palettes/#discrete .