Одна легенда для подплота Plotly для линейных графиков, созданных из двух фреймов данных в R - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь построить линейные диаграммы из двух фреймов данных, где первые столбцы обоих фреймов данных должны быть построены в одном фрейме и т. Д. И, наконец, все участки должны быть объединены в один участок. Но я получаю несколько легенд с одинаковыми символами. Фреймы данных -

d1 <- data.frame(x = 1:5,
                 y = c(2, 3, 4, 1, 5),
                 z = c(2, 1, 4, 6, 8))

d2 <- data.frame(x = 1:5,
                 y = c(1, 5, 8, 9, 11),
                 z = c(3, 5, 8, 13, 11))

Код, который я пытаюсь сгенерировать, составляет -

py <-
  plot_ly(
    x = d1$x,
    y = d1$y,
    type = "scatter",
    mode = "lines",
    name = names(d1)[2],
    line = list(color = "#56B4E9")
  ) %>% add_trace(y = d2$y,
                  name = names(d1)[3],
                  line = list(color = "#D55E00"))

pz <-
  plot_ly(
    x = d1$x,
    y = d1$z,
    type = "scatter",
    mode = "lines",
    name = names(d1)[2],
    line = list(color = "#56B4E9")
  ) %>% add_trace(y = d2$z,
                  name = names(d1)[3],
                  line = list(color = "#D55E00"))

subplot(py, pz)

Выход - enter image description here

Есть ли способ избавиться от повторяющихся легенд?

Заранее спасибо.

1 Ответ

1 голос
/ 10 апреля 2020

Этого можно достичь, сначала приведя данные в правильную форму, что также упрощает построение графика. Просто связывайте строки с вашими файлами, например, через dplyr::bindrows, и у вас есть переменная, необходимая для настройки legendgroup. Кроме того, ваши цвета отражают не переменные y и z, а наборы данных. Попробуйте это:

library(dplyr)
library(plotly)

d1 <- data.frame(x = 1:5,
                 y = c(2, 3, 4, 1, 5),
                 z = c(2, 1, 4, 6, 8))

d2 <- data.frame(x = 1:5,
                 y = c(1, 5, 8, 9, 11),
                 z = c(3, 5, 8, 13, 11))

# Bind the dfs
d3 <- bind_rows(list(d1 = d1, d2 = d2), .id = "id")

py <- d3 %>% 
  plot_ly(x = ~x, y = ~y, color = ~id, legendgroup= ~id) %>% 
  add_lines(colors = c("#D55E00", "#56B4E9"))

pz <- d3 %>% 
  plot_ly(x = ~x, y = ~z, color = ~id, legendgroup= ~id) %>% 
  add_lines(colors = c("#D55E00", "#56B4E9"), showlegend = FALSE)

subplot(py, pz) %>% 
  layout(legend=list(title=list(text='<b> Dataset </b>')))

Создано в 2020-04-10 пакетом Представить (v0.3.0)

enter image description here

...