我已尝试使用以下代码在一个绘图上绘制两个填充的波段,但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
答案 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)
答案 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)
答案 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