在图中使用组和颜色

时间:2016-02-09 04:12:39

标签: r ggplot2 plotly

我尝试使用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 个答案:

答案 0 :(得分:3)

我正在寻找相同的功能。看起来群体和颜色是氪石。 到目前为止,我唯一的解决方案是制作一列颜色代码并使用它来定义标记的颜色:

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

然而,这个技巧非常麻烦,并且不适用于仅采用单一颜色输入{“3}}的”线“。但是,如果您不对“线”给出输入,它会显示您无法控制的两种不同颜色。 and looks like this

答案 1 :(得分:0)

我试图做同样的事情,现在有一种正式方式:你需要在group_by之前添加plot_ly声明(参见enter image description here

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)