2016-08-01 25 views
1

我試過以下代碼在一個繪圖上繪製兩個填充帶,但plotly未填充在右邊一對線之間。什麼是正確的方法來做到這一點?如何使用R繪製在一個繪圖上繪製多個填充置信度帶

我也很想知道如何指定處理兩個波段重疊的理想透明度。

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 

回答

1

我不是很確定你想要什麼你的陰謀的樣子,但你可以使用geom_ribbon功能可以嘗試創建情節ggplot2。然後使用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

+0

這是方法,我一直在使用;我只是在我的一個R包中找到了將多個「plotly」圖放在一起導致部分圖像丟失,我想直接使用'plotly'更好地控制輸出。 –

0

fill = "tonexty"根據之前它來幹什麼痕跡罷了。所以,使其從高 - 低的每個組填補的方法之一是訂購電話明確:

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 
+0

感謝您收集tonexy的誤會。有沒有辦法讓group =或color =自動分成兩組? –

+0

@FrankHarrell嗯,我不確定是否有。也許有一種使用'lapply'的方式,但我不得不考慮它。 – Jota

+0

含義是,當啓動一個新的多邊形時,add_trace不是「group aware」,對吧? –