如何使用R plotly在一个图上绘制多个填充的置信区间

时间:2016-08-01 00:22:40

标签: r plotly

我已尝试使用以下代码在一个绘图上绘制两个填充的波段,但plotly未在正确的一对线之间填充。这样做的正确方法是什么?

我还要知道如何指定处理两个波段重叠的理想透明度。

require(plotly)
x <- c(1, 2, 1, 2)
g <- c('a','a','b','b')
y <- c(1, 2, 3, 4)
lo <- y - .1
hi <- y + .1

a <- plot_ly(x=x, y=y, group=g)
a <- add_trace(a, x=x, y=lo, group=g, fill='tonexty')
a <- add_trace(a, x=x, y=hi, group=g)
a

3 个答案:

答案 0 :(得分:1)

我不完全确定你想让你的情节看起来像什么,但你可以尝试使用ggplot2功能在geom_ribbon中创建情节。然后使用ggplotly将绘图转换为plotly图表:

df <- data.frame(
  x, g, y, lo, hi
)

plot <- ggplot(data=df, aes(x=x, y=y, colour=g)) + geom_line(aes(x=x)) +
  geom_ribbon(aes(ymin=lo,ymax=hi), alpha=0.25) 

ggplotly(plot)

enter image description here

答案 1 :(得分:1)

x <- c(1, 2, 1, 2)
g <- c('a','a','b','b')
y <- c(1, 2, 3, 4)
lo <- y - .1
hi <- y + .1
df <- cbind.data.frame(x,y,g,lo,hi)
g.uni <- unique(df$g)

fig <- df %>%
        plot_ly(type = "scatter",
        mode = "lines",
        showlegend = FALSE)

for(i in g.uni){
      fig <- fig  %>%
               add_fun(function(plot) {
                  plot %>% 
                  filter(g == i) %>%
                  add_ribbons(x = ~x,
                      ymin = ~lo,
                      ymax = ~hi
                  ) %>%
                  add_lines(
                   x = ~x,
                   y = ~y,
                   line = list(
                            color = "black",
                            dash = "dot"
                            )
                         )
                  }
               )
}
print(fig)

enter image description here

答案 2 :(得分:0)

fill = "tonexty"根据之前的痕迹填充。因此,从每个组的hi到lo填充的一种方法是明确地命令调用:

a <- plot_ly(x=x, y=y, group=g)
a <- add_trace(a, x = x[g=="a"], y = lo[g=="a"], group = g[g=="a"])
a <- add_trace(a, x = x[g=="a"], y = hi[g=="a"], group = g[g=="a"], fill = 'tonexty')
a <- add_trace(a, x = x[g=="b"], y = lo[g=="b"], group = g[g=="b"])
a <- add_trace(a, x = x[g=="b"], y = hi[g=="b"], group = g[g=="b"], fill = 'tonexty')

指定透明度的一种方法是使用toRGB

a <- plot_ly(x=x, y=y, group=g)
a <- add_trace(a, x = x[g=="a"], y = lo[g=="a"], group = g[g=="a"])
a <- add_trace(a, x = x[g=="a"], y = hi[g=="a"], group = g[g=="a"], fill = 'tonexty',
         fillcolor = toRGB("red", 0.1))
a <- add_trace(a, x = x[g=="b"], y = lo[g=="b"], group = g[g=="b"])
a <- add_trace(a, x = x[g=="b"], y = hi[g=="b"], group = g[g=="b"], fill = 'tonexty',
         fillcolor = toRGB("blue", 0.7))
a