2017-04-19 3 views
0

내 코드는 다음하지만 난 화이트 색상 대신 data_bydate $ avg_scoreplotly 색상 규모

g <- plot_ly(data_bydate, x = ~Date, y = ~avg_score, color =data_bydate$avg_score, colors = c("#FF0000","#FFFFFF", "#008000"), mode ='markers', marker = list(size=3)) %>% 
layout(legend = list(orientation = 'h'), 
     xaxis = list(title = "", 
        zeroline = FALSE, 
        tickformat="%X", 
        showline = TRUE), 
     yaxis = list(title = "", 
        zeroline = FALSE, 
        showline = TRUE)) 
의 최대와 최소의 중간 값을 0에 매핑하고 싶습니다

은 지금 당신이 만들 수 위의 0 값은 녹색, 0 값은 빨간색 아래에있는 그래프 ...

답변

1

를 제공하지 않습니다 자신의 흰색에 빨간색 (분)에서 진행 colorscale (영) 초록색 (최대). colorscale은 빨강에서 흰색까지 0 이하의 부분과 흰색에서 녹색까지 위의 다른 부분에 대한 두 가지 색상 표로 구성된 배열 목록입니다.

enter image description here

library(plotly) 
library(scales) 

set.seed(42) 
colorlength <- 100 

data_bydate <- data.frame(Date = c(1:23), 
          avg_score = c(runif(10, -5, -1), 
             rep(0,3), 
             runif(10, 1, 10) 
             ) 
         ) 

null_value <- (0 - min(data_bydate$avg_score))/(max(data_bydate$avg_score) - min(data_bydate$avg_score))   
border <- as.integer(null_value * colorlength) 
colorscale <- as.list(1:colorlength) 

#colorscale below zero 
s <- scales::seq_gradient_pal("#FF0000", "#FFFFFF", "Lab")(seq(0,1,length.out=border)) 
for (i in 1:border) { 
    colorscale[[i]] <- c((i - 1)/colorlength, s[i]) 
} 

#colorscale above zero 
s <- scales::seq_gradient_pal("#FFFFFF", "#008000", "Lab")(seq(0,1,length.out=colorlength - border)) 
for (i in 1:(colorlength - border)) { 
    colorscale[[i + border]] <- c((i + border)/colorlength, s[i]) 
} 

plot_ly(data_bydate, 
     x = ~Date, 
     y = ~avg_score, 
     type = 'scatter', 
     mode ='markers', 
     marker = list(size = 10, 
         color = ~avg_score, 
         colorscale = colorscale, 
         colorbar = list(len=1))) %>% 
    layout(plot_bgcolor = 'black') 
+0

감사합니다! 그것은 작동합니다! – user7891984