Plotly R 如何在时间序列图上应用非对称误差条

Plotly R How to apply unsymmetrical error Bars on Time Series plot

你好,我是 R 中的 plotly 新手。

我的数据是时间序列,每个点周围有 95% 的可信区间。这个可信区间是不对称的。 我加载的包

library(ggplot2)
library(stringr)
library(dplyr)
library(plotly)

我想用 plotly 复制这个 ggplot

ggplot(summarydata, mapping = aes(x = as.Date(Date), y = c.50.))+
  geom_errorbar(aes(ymin = c.2.5., ymax = c.97.5.), color ="grey", alpha = .90)+
  geom_point()+
  scale_x_date(date_labels = "%m-%Y")

我在 plotly 中复制它的尝试没有成功

summarydata %>% 
  plot_ly() %>% 
  add_markers(x = ~as.Date(Date), y = ~c.50.,
              error_y = ~list(symmetric = FALSE,
                              arrayminus = c.2.5.,
                              array = c.97.5.,
                              color = '#000000'))

如您所见,绘图误差线截然不同。我不确定为什么会这样。 我最接近复制我的 ggplot 的是以下

summarydata %>% 
  plot_ly() %>% 
  add_markers(x = ~as.Date(Date), y = ~c.50.) %>% 
  add_markers(x= ~as.Date(Date), y = ~c.97.5., symbol = I("line-ew"), size = 1.5, color = I('rgba(128,128,128, .5)')) %>% 
  add_markers(x= ~as.Date(Date), y = ~c.2.5., symbol = I("line-ew"), size = 1.5, color = I('rgba(128,128,128, .5)'))

这会将条形图的刻度添加为它们自己的标记,但是当将鼠标悬停在图上时,看起来有点忙。最终我正在开发一个闪亮的应用程序,允许用户点击这些点并使用支持图表进一步检查它们。这进一步的生意并不理想

这是我正在使用的矢量示例

summarydata$c.50.[1:10]
 [1] 0.6745592 0.6517352 0.6289426 0.7397868 0.7482902 0.6996212 0.6609487        NA        NA        NA

summarydata$Date[1:10]
 [1] "2021-07-07" "2021-07-10" "2021-07-21" "2021-07-23" "2021-07-24" "2021-07-27" "2021-07-28" "2020-04-12" "2020-04-16" "2020-04-18"

summarydata$c.97.5.[1:10]
 [1] 0.6879280 0.7240666 0.6506357 0.7425815 0.7500839 0.7026279 0.7130590        NA        NA        NA

summarydata$c.2.5.[1:10]
 [1] 0.6606896 0.6062380 0.6065747 0.7367133 0.7463247 0.6953307 0.5981074        NA        NA        NA

我明白了。首先 error_y 需要更改值而不是值本身

  add_markers(x = ~as.Date(Date), y = ~c.50.,
              error_y = ~list(symmetric = FALSE,
                              arrayminus = c.50. - c.2.5., #The change value
                              array = c.97.5. - c.50.,
                              color = '#000000')

我的第二个问题是 error_y 不喜欢数组中缺少值。 x 和 y 丢失了并且 plotly 可以处理但是对于 error_y 它不能(我认为)

所以完整的情节模仿了 ggplot。

summarydata %>%
  filter_all(all_vars(!is.na(.))) %>%  #error y does not like missing values.
  plot_ly() %>% 
  add_markers(x = ~as.Date(Date), y = ~c.50.,
              error_y = ~list(symmetric = FALSE,
                              arrayminus = c.50. - c.2.5.,
                              array = c.97.5. - c.50.,
                              color = '#000000'))