2

I have the following dataset

bike2 <- structure(list(dteday = c("2011-01", "2011-02", "2011-03", "2011-04", 
"2011-05", "2011-06", "2011-07", "2011-08", "2011-09", "2011-10", 
"2011-11", "2011-12", "2012-01", "2012-02", "2012-03", "2012-04", 
"2012-05", "2012-06", "2012-07", "2012-08", "2012-09", "2012-10", 
"2012-11", "2012-12"), cnt = c(38189L, 48215L, 63422L, 94870L, 
135821L, 143512L, 141341L, 136691L, 127418L, 123511L, 102167L, 
87323L, 96744L, 103137L, 164875L, 174224L, 195865L, 202830L, 
203607L, 214503L, 218573L, 198841L, 152664L, 123713L)), row.names = c(NA, 
-24L), class = c("tbl_df", "tbl", "data.frame"))

And this is the graph I currently have

a = ggplot(transform(bike2, year = substr(dteday, 1, 4)), 
       aes(x=dteday, y=cnt, group = 1, color = year))+
  geom_line(size = 1.2) + 
  labs(title = "Bike Rentals Per Month",
       x = "Month/Year",
       y = "Count") + 
  ggthemes::theme_solarized() +
  theme(axis.text.x=element_text(angle=45, hjust=1))

a

enter image description here

However, when I tried to apply ggplotly() to the graph, the line disconnects.

plotly::ggplotly(a)

enter image description here

How do I fix this?

Jon Spring
  • 55,165
  • 4
  • 35
  • 53
realbeast91
  • 176
  • 9

1 Answers1

1

A related question notes that plotly describes series slightly differently than ggplot, leading to some translation issues like this one.

One workaround would be to be explicit about what you want to show for each element, using geom_segment:

library(dplyr)
bike2 %>%
  mutate(dteday_next = lead(dteday),
         year = substr(dteday, 1, 4),
         cnt_next = lead(cnt)) %>%
ggplot(aes(x=dteday, xend = dteday_next,
           y=cnt, yend = cnt_next, color = year))+
  geom_segment() +
  labs(title = "Bike Rentals Per Month",
       x = "Month/Year",
       y = "Count") + 
  ggthemes::theme_solarized() +
  theme(axis.text.x=element_text(angle=45, hjust=1)) -> a
a

plotly::ggplotly(a)
Jon Spring
  • 55,165
  • 4
  • 35
  • 53