2016-09-20 1 views
1

shiny 앱에서 대화 형 차트 작성을 위해 plot.ly 라이브러리를 사용하고 있지만 차트의 색상 관리와 관련하여 문제가 있습니다.plot.ly 용 R 관리 색상

plotly 4.3.5 (github에서)를 사용하여 재현 예 :

library(data.table) 
library(plotly) 

dt <- data.table(campaign_week = c(1,2,3,1,2,3), category = c(rep("income",3),rep("cost",3)), 
       amount = c(100,50,35,-500,-20,-15)) 
dt_net <- dt[, .(amount = sum(amount)), by = campaign_week][,.(campaign_week, amount = cumsum(amount))] 

y <- list(title = "Income", tickformat = "$,.0f",hoverformat = "$,.2f") 

plot_ly(dt_net, x = ~campaign_week, y = ~amount, type = "scatter", 
     mode= "lines+markers", 
     line = list(color = "#00AEFF"), name = "Net Income") %>% 
    add_trace(data = dt, x = ~campaign_week, y = ~amount, color = ~category, type = "bar", 
      colors = c("#00ff00", "#ff0000")) %>% 
    layout(yaxis = y, barmode = "relative") 

이 내가 원하는 차트,하지만 색상이 trace에 올바르게 적용되지 않습니다를 작성합니다. 라인이 파란색의 그늘 인 동안 막대 중 하나가 빨간색이되고 다른 하나가 녹색이 될 것으로 예상됩니다.

편집plotly 차트의 스크린 샷 내가 전화를 복귀하고 inherit=FALSE 추가

Current plotly output

+0

이것은'~'을 제거하는 나를 위해 작동합니다. 당신의 음모는 어떻게 생겼습니까? –

+0

제공된 원본 코드를 기반으로 이미지를 추가했습니다. '~'을 제거하면 이에 대한 응답으로; 'object 'campaign_week'not found'라는 오류 메시지가 나타납니다. – Dan

+0

@VanceLopez 어떤 음모 버전을 사용하고 계십니까? OP 참조 버전. 4.3.5 (github의 개발 버전)에는 이전 버전과 비교하여 많은 구문 및 동작 변경 사항이 있습니다. – dww

답변

1

https://plot.ly/r/bar-charts/#bar-chart-with-relative-barmode의 예를 기반으로 각 카테고리에 대해 별도의 add_trace가 있습니다. 막대 차트 흔적이 분산 형 차트에서 modeline 속성을 상속하기 때문에

plot_ly(dt_net, x = ~campaign_week, y = ~amount, type = "scatter", 
     mode= "lines+markers", 
     line = list(color = "#00AEFF"), name = "Net Income") %>% 
    add_trace(data = dt[category=="income",] , x = ~campaign_week, y = ~amount, type = "bar", name = "income", 
      marker=list(color = "#00ff00")) %>% 
    add_trace(data = dt[category=="cost",] , x = ~campaign_week, y = ~amount, type = "bar", name = "cost", 
      marker=list(color = "#ff0000")) %>% 
    layout(yaxis = y, barmode = "relative") 

enter image description here

참고

,이 경고를 제공하지만, 이러한 특성은 바 지원되지 않습니다. 당신은 경고를 무시할 수도 있고, 산산조각을 피하기 전에 barchart를 호출 할 수도 있습니다. 이것처럼 :

plot_ly() %>% 
    add_trace(data = dt[category=="income",] , x = ~campaign_week, y = ~amount, type = "bar", name = "income", 
      marker=list(color = "#00ff00")) %>% 
    add_trace(data = dt[category=="cost",] , x = ~campaign_week, y = ~amount, type = "bar", name = "cost", 
      marker=list(color = "#ff0000")) %>% 
    add_trace(data = dt_net, x = ~campaign_week, y = ~amount, type = "scatter", mode= "lines+markers", 
      line = list(color = "#00AEFF"), name = "Net Income") %>% 
    layout(yaxis = y, barmode = "relative") 
+0

가장 깨끗한 해결책이 아니기 때문에 (어떤 점에서 다른 카테고리로 끝나는 경우),이 시점에서 얻을 수있는 최선의 방법이라고 생각합니다. – Dan

+1

@ Dan 많은 카테고리로 끝나면 루프로 추가 할 수 있습니다. 예 : [여기] (http://stackoverflow.com/a/39420523/2761575)를 참조하십시오. – dww

0

만들어 추가

library(data.table) 
library(plotly) 

dt <- data.table(campaign_week = c(1,2,3,1,2,3), category = c(rep("income",3),rep("cost",3)), 
       amount = c(100,50,35,-500,-20,-15)) 
dt_net <- dt[, .(amount = sum(amount)), by = campaign_week][,.(campaign_week, amount = cumsum(amount))] 

y <- list(title = "Income", tickformat = "$,.0f",hoverformat = "$,.2f") 

plot_ly(data=dt, x = ~campaign_week, y = ~amount, color = ~category, type = "bar", 
      colors = c("#00ff00", "#ff0000")) %>% 
    add_trace(data=dt_net, x = ~campaign_week, y = dt_net$amount, type = "scatter", 
      mode= "lines+markers", 
      line = list(color = "#00AEFF"), name = "Net Income", inherit=FALSE) %>% 
    layout(yaxis = y, barmode = "relative") 

아직도 전설에 문제가 :

enter image description here

+0

"소득"의 전설 색상이 왜 차트에 표시된 것과 일치하지 않는지에 대해 매우 유망 해 보입니다. – Dan

+0

'plot_ly (data = dt, x = ~ campaign_week, y = ~ amount, color = ~ 카테고리, type = "bar")와 같은 문제가 있습니다.' – HubertL

+0

오류가 발생했습니다. 'Error in eval (expr, envir, enclos) : object 'category'not found ' – Dan