2014-12-08 1 views
8

여러 경로가 여러 세그먼트 있습니다. 각 경로의 N 번째 세그먼트를 같은 색으로 어떻게 색칠합니까?색상 경로 세그먼트 in ggvis/layer_paths

예를 들어

:

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) 

결과 경로는 단색입니다 - 내가 그들을 파란색 노란색에서 확장하고 싶습니다.

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)) 

enter image description here

+2

그것은 보이는 - https://github.com/trifacta/vega/issues/122 – jalapic

답변

5

제약은 데이터의 GROUP_BY 그룹의 모든 세그먼트가 동일한 색으로 할 필요가있을 것 같다 : ggplot2를 사용

enter image description here

,이은으로 수행 할 수 있습니다 . 각 세그먼트에 대한 인위적인 그룹을 만들면 각 그룹은 두 개의 포인트 만 연결하여 주변을 둘러 볼 수 있습니다. 즉, 각 원래 그룹의 첫 번째 행과 마지막 행을 제외하고 데이터의 각 행을 두 배로 늘려야합니다. 필자는 데이터로 행을 손으로 선택하여 설명했습니다. 프로그래밍 방식으로 더 많은 작업을 수행 할 수있는 방법이 있지만이 작업이 가치가 있는지 여부는 실제 사용 사례에 따라 다릅니다.

다소 번거롭지만 확실한 해결 방법입니다. 이 열려있는 문제처럼

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) 

enter image description here

+0

그룹화 이후 그룹화하지 않고 달성 할 수있는 방법은 계산 비용입니다 큰 테이블을 다루고 있고 플롯을 동적으로 만들고 싶다면. –

+0

나는 꽤 "아니오"라고 확신한다. 그러나 당신이 효율적으로 원하는 것을 할 수있는 다른 방법이있을 수 있습니다. –