2017-05-22 1 views
1

을 Plotly에서 하나의 막대 색상 :조건부 고려 R 샤이니와 함께 다음과 같은 반짝 응용 프로그램

UI를

library(shiny) 
library(plotly) 
ui <- fluidPage(
    titlePanel("Random Number Generator"), 
    mainPanel(
     plotlyOutput("random_numbers") 
    ) 
) 

서버에

server <- function(input, output) { 
    df <- reactive({ 
    runif(100) 
    }) 

    output$random_numbers <- renderPlotly({ 
    plot_ly() %>% 
     add_trace(y = sort(df()), 
       type = 'bar', 
       name = 'Random Numbers', 
       marker = list(color = 'green')) %>% 
     add_trace(y = mean(df()), 
       type = 'bar', 
       name = 'Mean', 
       marker = list(color = 'orange')) 
    }) 
} 

출력은 다음과 같습니다

sample graph

질문

나는 오름차순 유지하고 평균 A를 유지할 수 있도록 내가 다른 runif (100)과 같은 순서로 같은 추적에 대한 평균을 표시 할 수있는 방법이 있나요 다른 색깔? 나는 다음과 같은 그래프를 같이 할 : 당신이 사용할 수있는 인수 x 있습니다

what it should look like

답변

1

. 이 배열에 정렬 된 배열에 가장 가까운 인덱스의 값을 전달할 수 있습니다. 귀하의 경우 : x = which.min(abs(sort(df()) - mean(df()))).

전체 응용 프로그램 :

library(shiny) 
library(plotly) 
ui <- fluidPage(
    titlePanel("Random Number Generator"), 
    mainPanel(
    plotlyOutput("random_numbers") 
) 
) 

server <- function(input, output) { 
    df <- reactive({ 
    runif(100) 
    }) 

    output$random_numbers <- renderPlotly({ 
    plot_ly() %>% 
     add_trace(
     x = 1:100, 
     y = sort(df()), 
       type = 'bar', 
       name = 'Random Numbers', 
       marker = list(color = 'green')) %>% 
     add_trace(
     x = which.min(abs(sort(df()) - mean(df()))), 
     y = mean(df()), 
       type = 'bar', 
       name = 'Mean', 
       marker = list(color = 'orange')) 
    }) 
} 


runApp(shinyApp(ui, server), launch.browser = TRUE) 

편집 : 집중하지만 올바른 해결책은 아래에서 확인할 수있는 더 많은 코드.

output$random_numbers <- renderPlotly({ 
    full.seq <- 1:(length(df()) + 1) 
    mean.idx <- which.min(abs(sort(df()) - mean(df()))) 
    if((sort(df()) - mean(df()))[mean.idx] < 0) mean.idx <- mean.idx + 1 
    rand.seq <- full.seq[-mean.idx] 

    plot_ly() %>% 
     add_trace(
     x = rand.seq, 
     y = sort(df()), 
     type = 'bar', 
     name = 'Random Numbers', 
     marker = list(color = 'green')) %>% 
     add_trace(
     x = mean.idx, 
     y = mean(df()), 
     type = 'bar', 
     name = 'Mean', 
     marker = list(color = 'orange')) 
    }) 
+0

것은 거기에 실수가 있기 때문에 경기가 여전히 –

+0

을 :)에 나를 이길 : D – BigDataScientist

+0

그래,하지만 내가 할 일이 - 그래서 당신 전부입니다. 당신이 음모를 꾸몄다는 것을 몰랐습니다 :) –

관련 문제