2016-12-21 1 views
4

plotly에 꺾은 선형 차트를 만들어 전체 길이가 같지 않게하려고합니다. 색상은 연속 눈금이 부여됩니다. ggplot2에서 쉽지만 을 사용하여 ggplotly을 사용하면 변수를 결정하는 색상이 범주 형 변수처럼 작동합니다. (원하는)ggplot2와 플롯 ggplotly를 사용하여 서로 다른 동작

require(dplyr) 
require(ggplot2) 
require(plotly) 

df <- data_frame(
    x = 1:15, 
    group = rep(c(1,2,1), each = 5), 
    y = 1:15 + group 
) 

gg <- ggplot(df) + 
    aes(x, y, col = group) + 
    geom_line() 

gg   # ggplot2 
ggplotly(gg) # plotly 

ggplot2 : plotlyenter image description here 는 : enter image description here

내가 한 일이 - 주위에 그, 다른 한편으로는, ggplot2에서 이상한 행동을 발견.

df2 <- df %>% 
    tidyr::crossing(col = unique(.$group)) %>% 
    mutate(y = ifelse(group == col, y, NA)) %>% 
    arrange(col) 

gg2 <- ggplot(df2) + 
    aes(x, y, col = col) + 
    geom_line() 

gg2 
ggplotly(gg2) 

필자도 플롯에서 직접 수행하는 방법을 찾지 못했습니다. 어쩌면 전혀 해결책이 없을 수도 있습니다. 어떤 아이디어?

답변

3

수치 가긴하지만 ggplotly가 group을 요인으로 처리하는 것처럼 보입니다. @ 용의 RaWR의 (지금 삭제) 의견에 대해서는

gg2 = ggplot(df, aes(x,y,colour=group)) + 
    geom_segment(aes(x=x, xend=lead(x), y=y, yend=lead(y))) 

gg2 

enter image description here

ggplotly(gg2) 

enter image description here

, 내 생각 : 당신은 세그먼트 점의 각 쌍 사이에 그려되도록 해결 방법으로 geom_segment 사용할 수 있습니다 선 색상을 연속 변수에 매핑하려면 group을 연속으로 사용하는 것이 좋습니다. 아래는 OP의 예를 group 열로 확장 한 것으로 두 개의 개별 카테고리가 아닌 연속적입니다.

set.seed(49) 
df3 <- data_frame(
    x = 1:50, 
    group = cumsum(rnorm(50)), 
    y = 1:50 + group 
) 

플롯 gg3 아래 geom_line를 사용하지만, 나는 또한 geom_point을 포함 시켰습니다. ggplotly이 포인트를 플로팅한다는 것을 알 수 있습니다. 그러나 두 개의 점이 같은 값인 group을 가지지 않으므로 선이 없습니다. geom_point을 포함하지 않으면 그래프가 비어있게됩니다. geom_segment-

enter image description here

전환

ggplotly(gg3) 

enter image description here

gg3 <- ggplot(df3, aes(x, y, colour = group)) + 
    geom_point() + geom_line() + 
    scale_colour_gradient2(low="red",mid="yellow",high="blue") 

gg3 

은 우리에게 우리가 ggplotly으로 원하는 라인을 제공합니다. 그러나 선 색상은 세그먼트의 첫 번째 점 ( geom_line 또는 geom_segment 사용 여부)에 따라 group 값을 기반으로하므로 각 (x, y) 사이에 group의 값을 보간하려는 경우가있을 수 있습니다) 부드러운 컬러 그라데이션을 얻기 위해 쌍 :

gg4 <- ggplot(df3, aes(x, y, colour = group)) + 
    geom_segment(aes(x=x, xend=lead(x), y=y, yend=lead(y))) + 
    scale_colour_gradient2(low="red",mid="yellow",high="blue") 

ggplotly(gg4) 

enter image description here

+0

이 철저한입니다! 고마워. –

관련 문제