Подзаголовки с использованием Plotly в R (исправлена ​​ошибка)

Как создать сетку подзаголовка с помощью Plotly в R?

Официальный сайт имеет хороший пример Python:

Пример Python

Код python имеет опцию rows=2 и cols=2, но в R функция subplot имеет только параметр nrows, без ncols.

Я попробовал этот пример в R, но nrows не работает, как ожидалось:

# Basic subplot
library(plotly)
p <- plot_ly(economics, x = date, y = uempmed)
subplot(p,p,p,p,
  margin = 0.05,
  nrows=2
) %>% layout(showlegend = FALSE)

Они находятся в строке, а не в сетке. См. Результат:

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

Вот ссылка R suplots для справки. К сожалению, использовать ggplotly для меня не вариант, например this

UPDATE

Это была ошибка. Плотная команда очень быстрая, и она была зафиксирована всего за 3 дня (здесь)! Версия Github уже обновлена. Отличная работа!

Ответ 1

Кажется, это настоящая ошибка в том, как subplot() генерирует домены y-оси для этих двух графиков. Действительно, они перекрываются, что можно легко увидеть, если вы выполните

p <- plot_ly(economics, x = date, y = uempmed)
q <- plot_ly(economics, x = date, y = unemploy)


subplot(p,q, nrows = 2)

Это приведет к созданию следующего графика:

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

Если вы внимательно посмотрите на ось y, вы увидите, что они перекрываются. Это намекает на проблему, так как subplot() определяет область y-осей подзаголовка.

Если мы исправим спецификацию домена y-осей вручную (следуя плоской документации), мы можем решить проблему:

subplot(p,q, nrows = 2) %>% layout(yaxis = list(domain = c(0, 0.48)), 
                                   yaxis2 = list(domain = c(0.52, 1)))

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

Теперь, если вы хотите воспроизвести матрицу subplot 4x4, подобную примеру Python, вам, вероятно, придется вручную настроить области оси x аналогичным образом.

Так как это ошибка, и мое решение является лишь обходным путем, я предлагаю, однако, чтобы вы задали проблему с plotly на GitHub.

Ответ 2

На основе this:

p <- economics %>%
  tidyr::gather(variable, value, -date) %>%
  transform(id = as.integer(factor(variable))) %>%
  plot_ly(x = ~date, y = ~value, color = ~variable, colors = "Dark2",
          yaxis = ~paste0("y", id)) %>%
  add_lines() %>%
  subplot(nrows = 5, shareX = TRUE)

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