plot_ly plot от dplyr ломается при вводе от Shiny SelectInput - PullRequest
0 голосов
/ 23 июня 2018

Я только учусь Shiny.

Вот код, который не работает (вместе с некоторыми встроенными примерами данных):

library(tidyverse)
library(shiny)
library(plotly)
library(shinyjs)


analysis_df<- data.frame(
  report_month = c("jan","jan","jan","jan","jan","jan"),
  payee_id = c("59","59","59","59","59","59"),
  Payee = sample(LETTERS[1:5],6,replace = TRUE),
  Attrib_1 = sample(LETTERS[6:10],6,replace = TRUE),
  Attrib_2 = sample(LETTERS[11:15],6,replace = TRUE),
  country_of_sale_iso2 = c("AU","AU","AU","NZ","AU","AU"),
  currency = c("USD","USD","USD","USD","USD","USD"),
  Attrib_3 = c("Pandora-AU","Pandora-AU","Pandora-AU","Pandora-AU","Pandora-AU","Pandora-AU"),
  month_paid = c("jun","jun","jun","jun","jun","jun"),
  Attrib_4 = sample(LETTERS[16:20],6,replace = TRUE),
  Attrib_5 = sample(LETTERS[21:25],6,replace = TRUE),
  units = c("2","8","6","2","10","4"),
  gross = c("0.003254785","0.013019141","0.009764356","0.003254785","0.016273926","0.00650957"),
  reserves_wh = c("0","0","0","0","0","0"),
  rsrv_liq = c("0","0","0","0","0","0"),
  Attrib_7 = c("0.002753548","0.011014193","0.008260645","0.002753548","0.013767741","0.005507097"),
  Attrib_8 = c("3.25E-04","0.001301914","9.76E-04","3.25E-04","0.001627393","6.51E-04"),
  Attrib_9 = c("1.76E-04","7.03E-04","5.27E-04","1.76E-04","8.79E-04","3.52E-04"),
  Attrib_10 = c("0.03","0.03","0.03","0.03","0.03","0.03"),
  Attrib_11 = c("1","1","1","1","1","1"),
  Attrib_12 = c("0.003254785","0.013019141","0.009764356","0.003254785","0.016273926","0.00650957")
)

attribs <- c("Attrib_1","Attrib_2","Attrib_3","Attrib_4")
payees <- analysis_df %>% distinct(Payee) %>% as.vector()

ui <- fluidPage(

  headerPanel("Product Explorer"),

  sidebarPanel(
  selectInput('slice_by', 'Color the Bars By:', choices = attribs, selected = "Attrib_1"),
  sliderInput('plotHeight', 'Adjust Chart Size', 
              min = 100, max = 2000, value = 425)
  ),
  mainPanel(
    plotlyOutput('Plot', height = "900px")
  )
)


server <- function(input, output) {

  output$Plot <- renderPlotly({

    col_cht <- analysis_df %>% 
      filter(payee_id == 59) %>% 
      plot_ly(x = ~report_month, 
              y = ~gross) %>%
      add_bars(color = input$slice_by) %>%
      layout(barmode = "stack",
             height = input$plotHeight)
  })

}

shinyApp(ui, server)

Я хочу, чтобы SelectInput работали это не так.

Однако, если я заменю

add_bars(color = input$slice_by) %>%

на

add_bars(color = ~Attrib_1) %>%

т.е., жестко запишите это, сюжет выглядит так, как должен.

1 Ответ

0 голосов
/ 23 июня 2018

Когда вы работаете с

> analysis_df %>%

, файл данных analysis_df передается в функции.Поэтому при использовании ~ Attrib_1 вы передаете значения в столбце Attrib_1, которые равны

# > analysis_df$Attrib_1
# [1] H J J H H G

. Таким образом, график получает разные цвета для уровней в analysis_df $ Attrib_1.

Когда вы используете input $ slice_by, который возвращает только одно значение, значение выбирается в Select.Таким образом, вы получаете только один цвет на графике.

Чтобы заставить его работать, используйте

color = analysis_df[, input$slice_by]

Если вы не хотите использовать analysis_df внутри трубы, ищите нестандартную оценкув R. С lazyeval вы можете сделать это,

color = interp(~x, x = as.name(input$slice_by))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...