ggplotly не работает должным образом, когда число граней больше - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь создать Shiny Dashboard, которая также содержит графики. Plotly - это отличный пакет, который обеспечивает отличную визуализацию и интерактивность для пользователей. Но когда я использую ggplotly для преобразования своих графиков ggplot в интерактивные графики, я не получаю ожидаемый результат, и проблемы увеличиваются, когда количество граней в выходных данных больше. например, пожалуйста, найдите код ниже.

Source_Data_dupli <-
data.frame(
key = c(1, 1, 1, 2, 2, 2, 3, 3, 3,4,4,5,5,6,7),
Product_Name = c(
  "Table",
  "Table",
  "Chair",
  "Table",
  "Bed",
  "Bed",
  "Sofa",
  "Chair",
  "Sofa",
  "Table",
  "Bed",
  "Chair",
  "Table",
  "Bed",
  "Bed"
),
Product_desc = c("XX", "XXXX", "YY", "X", "Z", "ZZZ", "A", "Y", 
"A","Y","XX", "XXXX", "YY", "X", "Z"),
Cost = c(1, 2, 3, 4, 2, 3, 4, 5, 6, 7,6,8,9,12,34)
)

Код, используемый для генерации графика

ggplotly(Source_Data_dupli %>% 
ggplot(aes(Product_Name, Cost)) + 
geom_col(aes(fill = Product_desc), position = position_dodge(preserve = 
"single")) +
facet_wrap(~key, scales = "free_x", strip.position = "bottom") +
theme(strip.placement = "outside"))

Это вывод, когда я не использую ggplotly

enter image description here

Это с ggplotly.

enter image description here

Проблемы, с которыми я сталкиваюсь при использовании ggplotlyis

  1. Значения оси и легенды обрезаются.
  2. Мы очень хорошо видим разницу в том, что графики во втором ряду сжаты и выглядят не очень хорошо,

Есть ли способ решить эту проблему? Также я собираюсь использовать эти графики в блестящей приборной панели. Пожалуйста, дайте мне знать ваши предложения.

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

Дэвид

1 Ответ

0 голосов
/ 07 октября 2019

Увеличьте поле вокруг вашего графика (общий объект) и панели (каждый из ваших графиков), чтобы это исправить. Также будет полезно переформатировать название легенды.

  scale_fill_discrete(name = "Product\ndescription") + 
  theme(strip.placement = "outside",
        plot.margin = margin(t = 10, r = 5, b = 5, l = 20, "points"),
        panel.spacing = unit(10, "points"))
...