Отфильтруйте линейную диаграмму на основе категориальной переменной - PullRequest
0 голосов
/ 13 сентября 2018

Я бы хотел отфильтровать диаграмму, созданную с помощью plotly, на основе столбца дискретных значений в моих данных. Конечная цель - использовать кнопки для обновления значения фильтра, поэтому я не хочу предварительно фильтровать данные.

library(plotly)    

df <- data.frame(group1 = rep(c('low', 'high'), each = 25),
                 x = rep(1:5, each = 5),
                 group2 = letters[1:5],
                 y = c(runif(25, 0, 2), runif(25, 3, 5)))

plot_ly(df, x = ~x, y = ~y, type = 'scatter',
        mode = 'line',
        color = ~group2,
        transforms = list(
            list(
                type = 'filter',
                target = ~group1,
                operation = '=',
                value = 'high'
            )
        )
)

Я ожидал, что это даст следующий график:

enter image description here

но вместо этого это дает:

enter image description here

Кажется, фильтрация не по той переменной. Почему данные не фильтруются так, как я ожидаю?

1 Ответ

0 голосов
/ 18 сентября 2018

Кажется, проблема в том, что аргумент target списка transforms может принимать только имя атрибута plot_ly, а не необработанные данные. Этот код работает:

library(plotly)    

set.seed(1)
df <- data.frame(group1 = rep(c("low", "high"), each = 25),
                 x = rep(1:5, each = 5),
                 group2 = letters[1:5],
                 y = c(runif(25, 0, 2), runif(25, 3, 5)))

plot_ly(df, x = ~x, y = ~y, customdata=~group1, type = 'scatter',
        mode = 'line',
        color = ~group2,
        transforms = list(
          list(
            type = 'filter',
            target = 'customdata',
            operation = '=',
            value = 'high'
          )
        )
)

и выдает тот же график, что и этот

plot_ly(df %>% filter(group1=="high"), x = ~x, y = ~y, type = 'scatter',
        mode = 'line',
        color = ~group2
)

Конечно, вместо использования customdata вы можете заменить его на ids и т. Д., Атрибут, который plot_ly позволяет, но не влияет на эстетику вашего графика.

...