2016-04-22 10 views
-1

In ggplot() kann ich die lwd Variable innerhalb aes dynamisch ändern. Wenn ich stattdessen plot_ly() verwende, ist diese Option nicht verfügbar.Plot-Äquivalent von ggplot's lwd

Ich bin mir auch bewusst von ggplotly eine ggplot zu plotly zu konvertieren, aber es gibt Probleme geom_line() in ggplotly verwenden, wie sie in dieser Frage gesehen: ggplotly not displaying geom_line correctly

ich derzeit plotly in R verwende, kann aber meine Code-Basis konvertieren zu Python, wenn nötig.

+0

Warum der Downvote/Vote zu schließen? –

+0

Ich weiß, dass Sie das für Marker tun können, indem Sie 'marker = list (size = ...) 'setzen, aber ich denke nicht, dass das für Linien möglich ist. Wenigstens nicht wie 'aes' in' ggplot() '. Sie könnten sich damit herumschlagen, indem Sie jede Gruppe als separate Spur hinzufügen, wenn Sie 'plot_ly()' verwenden. – royr2

+0

Danke. Was meinst du damit? –

Antwort

0

@Adam_G siehe unten. Es ist hack-y der Art, so könnte es einen besseren Weg geben, dies zu tun. Jemand, der besser informiert ist als ich, könnte etwas Licht in die Sache bringen.

library(plotly) 
library(dplyr) 

ds <- data.frame(x = 1:100, 
       y = sample(1:1000, size = 100), 
       group = sample(LETTERS[1:3], size = 100, replace = T)) 

# Default 
plot_ly(ds, x = x, y = y, group = group, mode = "lines") 

# Manually change linewidth (if not too many groups) 
plot_ly(ds %>% filter(group == "A"), x = x, y = y, mode = "lines", line = list(width = 2)) %>% 
    add_trace(data = ds %>% filter(group == "B"), x = x, y = y, mode = "lines", line = list(width = 5)) %>% 
    add_trace(data = ds %>% filter(group == "C"), x = x, y = y, mode = "lines", line = list(width = 10)) 

# In a loop (if too many groups) 
p <- plot_ly() 
vec <- unique(ds$group) 
widths <- c(2, 5, 10) 

for(i in 1:3){ 
    # Note that evaluate = T is important here 

    p <- add_trace(p, data = ds %>% filter(group == vec[i]), x = x, y = y, mode = "lines", 
       line = list(width = widths[i]), evaluate = T) 
} 

p 
Verwandte Themen