R Plotly - использовать псевдоним для переменной оси X - PullRequest
0 голосов
/ 13 марта 2020

Попытка выяснить, как использовать псевдоним, но не заменять переменную на оси x гистограммы R Plotly. Возьмите следующий пример:

if (interactive()) {
  library(plotly)

  PartNum <- c("123", "456", "789", "321", "654")
  PartName <- c("washer", "nut", "bolt", "washer", "screw")
  PartCount <- c(10, 15, 6, 8, 2)
  data <- data.frame(PartNum, PartName, PartCount)

  ui <- fluidPage(
    radioButtons("radio_PartNumName", "Show Part:",
                 c("Number" = "PartNum", "Name" = "PartName"),
                 inline = TRUE
    ),
    plotlyOutput("partPlot")
  )

  server <- function(input, output, session) {
    output$partPlot <- renderPlotly({
      plot_ly(data,
              x = ~get(input$radio_PartNumName),
              y = ~PartCount,
              type = "bar",
              text = ~PartCount)
    })
  }
  shinyApp(ui, server)
}

При запуске выдает график, подобный следующему:

number

Когда вы нажимаете радио чтобы изменить его на Name, график изменится и объединит два значения шайбу , например:

Name

Я не желая, чтобы значения агрегировались, а вместо этого просто замените Part Numbers на Part Names, чтобы график хотел что-то вроде этого:

Final

1 Ответ

1 голос
/ 13 марта 2020

Вам нужно будет использовать ticktext для изменения меток тиков, х должен быть постоянным.

Для получения дополнительной информации см. schema(): объект ► макет ► layoutAttributes ► xaxis ► ticktext

Пожалуйста, проверьте следующее:

library(shiny)
library(plotly)

if (interactive()) {

  PartNum <- c("123", "456", "789", "321", "654")
  PartName <- c("washer", "nut", "bolt", "washer", "screw")
  PartCount <- c(10, 15, 6, 8, 2)
  data <- data.frame(PartNum, PartName, PartCount)

  ui <- fluidPage(
    radioButtons("radio_PartNumName", "Show Part:",
                 c("Number" = "PartNum", "Name" = "PartName"),
                 inline = TRUE
    ),
    plotlyOutput("partPlot")
  )

  server <- function(input, output, session) {
    output$partPlot <- renderPlotly({
      plot_ly(data,
              x = ~PartNum,
              y = ~PartCount,
              type = "bar",
              text = ~PartCount) %>%
      layout(xaxis = list(
        tickmode = "array",
        tickvals = ~PartNum,
        ticktext = ~get(input$radio_PartNumName))
      )
    })
  }
  shinyApp(ui, server)
}

Result

...