2016-08-01 18 views
1

Ich habe den folgenden Code ausprobiert, um zwei gefüllte Bänder in einem Diagramm zu zeichnen, aber plotly füllt nicht zwischen dem rechten Linienpaar. Was ist der richtige Weg, dies zu tun?So zeichnen Sie mehrere gefüllte Konfidenzbänder in einem Diagramm mit R plotly

Ich würde auch schätzen zu wissen, wie man die ideale Transparenz für die Behandlung der Überlappung von zwei Bändern spezifiziert.

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 

Antwort

1

Ich bin nicht ganz sicher, was Sie Ihr Grundstück aussehen wollen, aber Sie können versuchen, das Grundstück in ggplot2 zu schaffen mit der geom_ribbon Funktion. Dann ggplotly verwenden, um die Handlung zu einem plotly Diagramm zu konvertieren:

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

mit, dass der Ansatz I ist hatte benutzt; Ich finde nur in einem meiner R-Pakete, dass das Zusammensetzen mehrerer "plotly" Plots dazu führt, dass ein Teil des Bildes verloren geht und ich die Ausgabe mit 'plotly' direkt steuern wollte. –

0

fill = "tonexty" füllt nach welcher Spur kam, bevor es. So kann man es von der hallo zu lo für jede Gruppe füllen zu machen, ist die Anrufe explizit zu bestellen:

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') 

Eine Möglichkeit, die Transparenz zu spezifizieren ist 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

Danke für das Tonyx-Missverständnis. Gibt es eine Möglichkeit, Group = oder Color = die Arbeit der automatischen Trennung in die 2 Gruppen zu lassen? –

+0

@FrankHarrell Hm, ich bin mir nicht sicher, ob es da ist. Vielleicht gibt es einen Weg, 'lapply' zu benutzen, aber ich muss darüber nachdenken. – Jota

+0

Die Implikation ist, dass 'add_trace' nicht" Gruppenbewusst "ist, wenn ein neues Polygon gestartet wird, richtig? –