geom_rect отсутствует при преобразовании ggplot2 в ggplotly

#r #ggplot2 #plotly #ggplotly

#r #ggplot2 #plotly #ggplotly

Вопрос:

Я пытаюсь собрать ggplotly график с тремя элементами ( geom_point , geom_line , и geom_rect ), и он выглядит нормально ggplot2 . Однако, когда я конвертирую в ggplotly, geom_rect исчезает. Я думаю, что это что-то с inherit.aes функцией?

Ниже приведен код для построения тестовых данных.

 library(ggplot2)
library(plotly)

dates_seq = seq.Date(as.Date("2019-03-13"), as.Date("2019-04-21"), by = "1 day")
df = data.frame(ds = dates_seq,
                y = rnorm(length(dates_seq), mean = 50, sd = 5),
                yhat = rnorm(length(dates_seq), mean = 50, sd = 5)
                )
df$yhat_lower = df$yhat - 5
df$yhat_upper = df$yhat   5

gg <- ggplot(df, aes(x = ds, y = y))  
    labs(x = 'Date', y = 'Sales')  
      geom_ribbon(aes(ymin = yhat_lower, ymax = yhat_upper), fill = 'blue',
                  alpha = 0.2,
                  na.rm = TRUE)

start_date = as.Date("2019-04-19")
gg <- gg  
  geom_point(na.rm=TRUE)  
  geom_vline(xintercept = as.numeric(as.Date(start_date - lubridate::days(1))), linetype = 2, color = "black")  
  geom_line(aes(y = yhat), color = 'blue',
            na.rm = TRUE)  
  theme_classic()

promo_df = data.frame(xmin = c("2019-03-15", "2019-04-01"), xmax = c("2019-03-18", "2019-04-08"),
                          ymin = -Inf, ymax = Inf, Promo = "Yes")
promo_df$id = 1:nrow(promo_df)
gg = gg  
  geom_rect(data=promo_df, inherit.aes=FALSE,
            aes(xmin=as.Date(xmin),
                xmax=as.Date(xmax),
                ymin=ymin,ymax=ymax,
                group=id, fill = factor(Promo)), alpha=0.2)  
  scale_fill_discrete(name = "On Promo?")
 

Изображение ggplot показывает желаемый результат с geom_rect помощью .

 gg
 

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

А теперь версия ggplotly:

 ggplotly(gg)
 

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

Есть ли какой-либо способ сделать ggplotly изображение похожим на базовую ggplot2 диаграмму?

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

1. Я только что столкнулся с той же проблемой, что и вы, — похоже, это связано с тем, что ggplotly он не поддерживает ymin = -Inf и ymax = Inf . Я еще не придумал обходной путь, но опубликую ответ, если найду!

2. Спасибо @Clara! Я сделаю то же самое

Ответ №1:

Клара права в отношении неспособности ggplotly поддерживать параметры ymin / max. Лучший способ обойти это — просто вручную установить параметры, равные масштабу вашего предыдущего (основного) слоя. Таким образом, в этом случае оно будет равно 0/65.