Плотный график неправильно отображается при преобразовании из ggplot2

#r #ggplot2 #plotly

Вопрос:

Когда я конвертирую из ggplot в plotly, кажется, что даты на графике фасета не совсем соответствуют странице. Я хочу получить больше места между концом страницы и датами по оси x на последнем граненом графике. Я пытался сделать это динамически, но, похоже, это не работает. Кто — нибудь знает, как решить эту проблему?

Вот мой код:

 library(ggplot2) library(plotly)  #reproducible data here test_data lt;- structure(list(Toys = c("Slinky", "Slinky", "Slinky", "Slinky",   "Slinky", "Slinky", "Tin Solider", "Tin Solider", "Tin Solider",   "Tin Solider", "Tin Solider", "Tin Solider", "Hungry Hungry Hippo",   "Hungry Hungry Hippo", "Hungry Hungry Hippo", "Hungry Hungry Hippo",   "Hungry Hungry Hippo", "Hungry Hungry Hippo", "Bead Maze", "Bead Maze",   "Bead Maze", "Bead Maze", "Bead Maze", "Bead Maze", "Hula Hoop",   "Hula Hoop", "Hula Hoop", "Hula Hoop", "Hula Hoop", "Hula Hoop",   "Kaleidoscope", "Kaleidoscope", "Kaleidoscope", "Kaleidoscope",   "Kaleidoscope", "Kaleidoscope", "Pogo Stick", "Pogo Stick", "Pogo Stick",   "Pogo Stick", "Pogo Stick", "Pogo Stick", "Jump N' Dunk Trampoline",   "Jump N' Dunk Trampoline", "Jump N' Dunk Trampoline", "Jump N' Dunk Trampoline",   "Jump N' Dunk Trampoline", "Jump N' Dunk Trampoline", "Play-Doh",   "Play-Doh", "Play-Doh", "Play-Doh", "Play-Doh", "Play-Doh", "Mr. Potato Head",   "Mr. Potato Head", "Mr. Potato Head", "Mr. Potato Head", "Mr. Potato Head",   "Mr. Potato Head", "Corn Popper", "Corn Popper", "Corn Popper",   "Corn Popper", "Corn Popper", "Corn Popper", "Let's Go Fishing",   "Let's Go Fishing", "Let's Go Fishing", "Let's Go Fishing", "Let's Go Fishing",   "Let's Go Fishing", "Operation", "Operation", "Operation", "Operation",   "Operation", "Operation", "Ker Plunk", "Ker Plunk", "Ker Plunk",   "Ker Plunk", "Ker Plunk", "Ker Plunk"), Price = c(5.99, 6.99,   7.99, 9, 6, 5.54, 7, 9.99, 6.99, 6.75, 8, 7.99, 9.99, 7.99, 5.99,   8.99, 10.99, 9.75, 9.99, 10.15, 8.99, 6.99, 5.99, 9.99, 9.99,   7.75, 8.75, 9.95, 4.5, 5.54, 3.99, 4.5, 7.5, 8.95, 8.9, 6.99,   150.99, 175.99, 170.99, 180.99, 190.99, 175, 310.64, 335.64,   360.64, 385.64, 410.64, 435.64, 7.99, 8.99, 9.05, 9.1, 9.99,   10.15, 6.75, 8.75, 7.75, 9.75, 6.75, 8.75, 10.35, 10.55, 11,   17, 17.75, 18, 6.97, 7.05, 8.97, 9, 8.99, 6.99, 19.99, 21.15,   16.99, 17.99, 18.99, 14.99, 14.96, 14.97, 15.15, 18.17, 19, 50  ), Dates = c("1/1/2021", "3/1/2021", "5/1/2021", "7/1/2021",   "9/1/2021", "10/1/2021", "1/1/2021", "3/1/2021", "5/1/2021",   "7/1/2021", "9/1/2021", "10/1/2021", "1/1/2021", "3/1/2021",   "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021", "1/1/2021",   "3/1/2021", "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021",   "1/1/2021", "3/1/2021", "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021",   "1/1/2021", "3/1/2021", "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021",   "1/1/2021", "3/1/2021", "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021",   "1/1/2021", "3/1/2021", "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021",   "1/1/2021", "3/1/2021", "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021",   "1/1/2021", "3/1/2021", "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021",   "1/1/2021", "3/1/2021", "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021",   "1/1/2021", "3/1/2021", "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021",   "1/1/2021", "3/1/2021", "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021",   "1/1/2021", "3/1/2021", "5/1/2021", "7/1/2021", "9/1/2021", "10/1/2021"  )), row.names = c(NA, -84L), class = "data.frame") "collector")), delim = ","), class = "col_spec")    chart_height lt;- test_data %gt;%   dplyr::select(Toys) %gt;%   unique() %gt;%   nrow() * 130  p lt;- test_data %gt;% ggplot(aes(x = Dates, y = Price, text = paste(paste0("Price: $", sprintf("%.2f", Price)),"lt;brgt; Date: ", Dates), group = Toys))     geom_point(size = 1.5)     geom_line()     facet_wrap(~Toys, scales = "free", ncol = 1)    theme_bw()     theme(  title = element_text(colour='black'),  axis.title.x = element_blank(),  axis.title.y = element_blank(),  axis.text.x = element_text(size = rel(0.85)),  panel.grid.major = element_line(colour = "grey70", size = 0.1),  panel.grid.minor = element_blank(),  panel.border = element_blank(),  panel.spacing = unit(0.45,"cm")  )  ggplotly(p, height = chart_height, tooltip = "text", xaxis = list(automargin = T))  

Вот изображение того, что я имею в виду (выделенная часть-это то, о чем я говорю):

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

Ответ №1:

Не совсем уверен, что вы подразумеваете под «ось x отрезана» (поскольку из вашего рисунка довольно ясно, что на самом деле видны значения оси x и галочки и т. Д.).

Что я действительно вижу как проблему, так это то, что ваша Dates колонка является персонажем. Вы можете исправить это с помощью:

 test_data lt;- test_data %gt;% mutate(Dates=as.Date(Dates, format="%m/%d/%Y"))  

Чтобы добавить место ниже, вы можете использовать layout с margin :

 ggplotly(p, height = chart_height, tooltip = "text", xaxis = list(automargin = T)) %gt;%   layout(margin=list(b=50))  

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

1. Я пытаюсь освободить больше места между концом страницы и датами, представленными по оси x. Я постараюсь прояснить это в вопросе.

2. хорошо, это полезно — вы можете использовать поля в макете