отфильтровать график plot_ly по идентификатору, используя манипуляторWidget в R - PullRequest
0 голосов
/ 21 марта 2020

Впервые задаю вопрос здесь, так что дайте мне знать, если я задаю правильный вопрос.

Я пытаюсь отфильтровать график plot_ly по Имени, используя manageulateWidget в R, но получаю следующее сообщение об ошибке:

Предупреждение: ошибка в: все столбцы в таблице должны быть объектами 1d или 2d: * Столбец color равен NULL 113:

Структура данных:

Name                 Date            Value
lastName, firstName1 2020-03-19      96.5
lastName, firstName1 2020-03-17      96.0
lastName, firstName2 2020-03-19      87.2
lastName, firstName2 2020-03-17      85.3
lastName, firstName3 2020-03-19      69.1
lastName, firstName3 2020-03-17      70.2

Мой код выглядит следующим образом:

plotVar <- function(xvar, yvar, name) {

  plot_ly(x = ~data[[xvar]], y = ~data[[yvar]], color = ~data[[name]], type = "bar") %>% 
    layout(xaxis = list(title = xvar), yaxis = list(title = yvar))
}

plotVar("Date", "Value", "Name")

varNames <- names(data)[2:3]

manipulateWidget(
  plotVar(xvar, yvar, name),
  xvar = mwSelect(varNames, value = "Date"),
  yvar = mwSelect(varNames, value = "Value"),
  name = mwSelect(choices = data$Name)
)

Последняя строка (name = mwSelect(choices = data$Name)) моего кода нам кажется, где проблема.

Может ли кто-нибудь помочь? Было бы очень признателен :) Пожалуйста, обратите внимание, я не из компьютерных наук.

С уважением,

Даниэль

1 Ответ

0 голосов
/ 21 марта 2020

Чтобы отфильтровать data с помощью Name, нам нужно передать его в качестве аргумента, в то же время plot_ly необходимо color в качестве имени столбца в предоставленном data. Здесь измененная версия вашей функции.

plotVar <- function(data_var, xvar, yvar, name, name_choice) {
  if(name_choice=="all"){
    data_var = data_var
    plot_ly(x = ~data_var[[xvar]], y = ~data_var[[yvar]], color = ~data_var[[name]], type = "bar") %>% 
      layout(xaxis = list(title = xvar), yaxis = list(title = yvar))

  } else {
    data_var = data_var[data_var$Name==name_choice,]
    plot_ly(x = ~data_var[[xvar]], y = ~data_var[[yvar]], type = "bar") %>% 
      layout(xaxis = list(title = xvar), yaxis = list(title = yvar))
  }
}

plotVar(data_var = data, "Date", "Value", "Name", name_choice = "all")

varNames <- names(data)

manipulateWidget(
  plotVar(data, xvar, yvar, name, name_choice),
  xvar = mwSelect(varNames, value = "Date"),
  yvar = mwSelect(varNames, value = "Value"),
  name = mwSelect(varNames, value = "Name"), 
  name_choice = mwSelect(choices = c("all", unique(data$Name)))
)
...