2017-05-22 16 views
1

とPlotlyで1つのバーを色は、次の光沢のあるアプリを考えてみましょう:条件付きではRシャイニー

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

UI

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

SERVERが出力は次のようになります。

sample graph

QUESTION

は、私は昇順を維持し、平均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

うんは、私がやるべき仕事を持っている - それはすべてあなたのものです。あなたが平気で行ったことを知らなかった:) –