8

我有多个包含多个段的路径。如何用相同的颜色为每条路径的第 N 段着色?

例如:

require(dplyr)
require(ggvis)
df <- data.frame(x = runif(10,0,10), y = runif(10,0,10), 
                 group=c(rep(5,5),rep(10,5)), colorIdx=rep(c(1:5), 2))
df$group = factor(df$group)

color_fun = colorRampPalette(c("yellow","blue"),5)

myColors = color_fun(5)

df$color = myColors[df$colorIdx]

df %>% group_by(group) %>% 
  ggvis(~x, ~y, strokeWidth:=~group) %>% layer_paths(stroke :=~color)

生成的路径是单色的 - 我希望它们从黄色缩放到蓝色。

在此处输入图像描述

使用 ggplot2,这可以通过以下方式完成:

require(ggplot2)
ggplot(df, aes(x=x, y=y, group=group, colour=colorIdx, size=group)) + geom_path() +
  scale_colour_gradient("", low="#FED863", high="#2A6EBB", limits=c(1,4))

在此处输入图像描述

4

1 回答 1

5

约束似乎是数据的 group_by 组中的所有段都必须是相同的颜色。您可以通过为每个段创建一个人工组来绕过它,每个组仅连接两个点。这意味着除了每个原始组的第一行和最后一行之外,您必须将数据中的每一行加倍。我已经通过手动选择包含您的数据的行来说明这一点;有一种方法可以更以编程方式进行,但这是否值得取决于您的实际用例。

这有点麻烦,但肯定是一种解决方法。

df2 <- df[c(1,2,2,3,3,4,4,5,    6,7,7,8,8,9,9,10), ]
df2$group2 <- c(rep(letters[1:4], each=2), rep(letters[6:9], each=2))

df2 %>% group_by(group2) %>% 
   ggvis(~x, ~y, strokeWidth:=~group) %>% 
   layer_paths(stroke :=~color)

在此处输入图像描述

于 2015-03-07T02:02:54.877 回答