2016-02-09 57 views
2

我試圖用plotly繪製r中的許多維度 - 是否可以同時使用因子變量的colorgroup參數來改變顏色的線條?積極使用組和顏色

實施例:

grp <- c(letters[c(1,1,1,1,2,2,2,2)]) 
a <- c(1,2,3,4,2,3,4,5) 
b <- c(1,3,5,6,1,2,4,4) 
lvl <- c(1,1,2,2,1,1,2,2) 

df <- data.frame(grp, a, b, lvl) 

當繪製此使用ggplot()我能夠產生期望的效果如下,與grp爲限定每行和lvl以限定線的截面的顏色:

ggplot(data = df, aes(x = a, y = b, group = grp, color = lvl)) + geom_line() + geom_point() 

enter image description here

然而,當我再調用ggplotly()該行分組爲,由lvl着色。

enter image description here

回答

2

我正在尋找相同的功能。看來,這個組和顏色是陰謀氪石。 到目前爲止,我唯一的解決辦法是讓顏色代碼列,並用它來定義標記的顏色:

library(scales) 
library(plotly) 

grp <- c(letters[c(1,1,1,1,2,2,2,2)]) 
a <- c(1,2,3,4,2,3,4,5) 
b <- c(1,3,5,6,1,2,4,4) 
lvl <- c(1,1,2,2,1,1,2,2) 
df <- data.frame(grp, a, b, lvl) 

Palette <- data.frame(lvl = unique(df$lvl), color = brewer_pal("seq",palette = "Reds",direction = -1)(length(unique(df$lvl))), stringsAsFactors = FALSE) 

df <- merge(x = df, y = Palette, by = "lvl") 

p <- plot_ly(df, x = a, y = b, group = grp, mode = "markers+lines", marker = list(color = color, size = 8), line = list(color = "black", width = 2)) 
p 

然而,這招很麻煩,不與「行」的是隻需要工作單色輸入and looks like this。但是,如果您不給「線」輸入它顯示兩種不同的顏色,你無法控制。 like this

0

我試圖做同樣的事情,現在有一個官方的方法:你需要plot_ly前添加一個group_by聲明(見https://github.com/ropensci/plotly/issues/418

grp <- c(letters[c(1,1,1,1,2,2,2,2)]) 
a <- c(1,2,3,4,2,3,4,5) 
b <- c(1,3,5,6,1,2,4,4) 
lvl <- c(1,1,2,2,1,1,2,2) 

df <- data.frame(grp, a, b, lvl) 
df %>% group_by(grp) %>% plot_ly(x = a, y = b, mode = "markers+lines", color = lvl)