我正在尝试使用plotly绘制多个维度r- 是否可以同时使用color和group参数来绘制一条改变颜色的线?
例子:
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)
Run Code Online (Sandbox Code Playgroud)
当使用它绘制时,ggplot()我能够创建所需的效果,如下所示,用grpas 定义每条线并lvl定义线段的颜色:
ggplot(data = df, aes(x = a, y = b, group = grp, color = lvl)) + geom_line() + geom_point()
Run Code Online (Sandbox Code Playgroud)
然而,当我随后拨打电话时,ggplotly()该线路将按 进行分组和着色lvl。
我正在寻找相同的功能。看来这个群体和颜色是阴谋氪石。到目前为止,我唯一的解决方案是制作一列颜色代码并使用它来定义标记的颜色:
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
Run Code Online (Sandbox Code Playgroud)
然而这个技巧非常麻烦,并且不适用于仅接受单一颜色输入并且看起来像这样的“线” 。但是,如果您不向“线”提供输入,它会显示您无法控制的两种不同颜色。像这样
我试图做同样的事情,现在有一个官方的方法:你需要group_by之前添加一个声明plot_ly(参见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)
Run Code Online (Sandbox Code Playgroud)