отображение цвета на переменные с помощью Restyle Buttons с использованием графика R - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь отобразить цвет по двум переменным, используя Restyle Кнопки , сохраняя динамику оси Y и X при изменении цвета. Когда я добавляю color=~fruit в основной график, это дает искомый результат, но я теряю динамику осей при изменении переменных. Я в основном хочу изменить цвет линий по отношению к фруктам. Ниже приведены данные и код, который я использую для игры с этим. Спасибо за любую помощь или советы!

библиотеки

library(dplyr); library(plotly);

данные

dfake <- tibble(days = seq(1,100, by=1),
                 bask = seq(1,500, by=5),
                fruit = c(rep("grape", 50), 
                          rep("apple", 50)));

код построения

plot <- dfake %>%
        plot_ly(x = ~days, y = ~bask, text = ~fruit, 
                type = 'scatter', 
                mode = 'lines', 
                hoverinfo = 'text',
                transforms = list(
                        list(type = 'filter',
                             target = ~fruit,
                             operation = '=',
                             value = unique(dfake$fruit)[1]))) %>%
        layout(updatemenus = list(
                list(type = 'dropdown',
                     active = 1,
                     buttons = list(
                             list(method = "restyle",
                                  args = list("transforms[0].value", 
                                              unique(dfake$fruit)[1]),
                                  label = unique(dfake$fruit)[1]),
                             list(method = "restyle",
                                  args = list("transforms[0].value", 
                                              unique(dfake$fruit)[2]),
                                  label = unique(dfake$fruit)[2])))));

plot;

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Да, я не был уверен, что данные были в наилучшем возможном формате. Итак, я возился с этим следующим образом:

  1. Создайте , где каждый Y-axis variable входит в отдельный столбец ( относится к философии приливов и отливов *) 1008 *).
  2. Добавление слоев за слоем в .
  3. Использование updatemenus для получения интерактивных кнопок и требуемой видимости.
#Converting into a dataframe, mutating new columns for each fruit and getting their name:
df_dfake <- as.data.frame(dfake)
df_dfake <- df_dfake %>% mutate(fruit1_bask = case_when(fruit == "grape" ~ bask),
                                fruit2_bask = case_when(fruit == "apple" ~ bask))
fruit1 <- unique(dfake$fruit)[1]; fruit2 <- unique(dfake$fruit)[2];

#Plotly, adding layer by layer:
fig <- df_dfake %>% plot_ly(type = 'scatter', 
                            mode = 'lines', 
                            hoverinfo = 'text');
fig1 <- fig %>% add_lines(x = ~days , y = ~fruit1_bask, text = ~fruit,
                  line=list(color="#33CFA5"));
fig2 <- fig1 %>% add_lines(x = ~days, y = ~fruit2_bask, text = ~fruit,
                         line=list(color="#F06A6A")); 
fig2;  

fig2

enter image description here

Теперь, updatemenus компонент, для создания интерактивных кнопок

updatemenus <- list(
  list(
    active = -1,
    type= 'buttons',
    buttons = list(
      list(
        label = unique(dfake$fruit)[1],
        method = "update",
        args = list(list(visible = c(FALSE, TRUE)),# this defines visibility on click
                    list(title = "fruit1",
                         annotations = list(c(), df_dfake$fruit1_bask)))),
      list(
        label = unique(dfake$fruit)[2],
        method = "update",
        args = list(list(visible = c(T, F)),# this defines visibility on click
                    list(title = "fruit2",
                         annotations = list(c(), df_dfake$fruit2_bask))))
      )
  )
)

fig3 <- fig2 %>% layout(title = "Apples & Oranges", showlegend=FALSE,
                      xaxis=list(title="Days"),
                      yaxis=list(title="Basket"),
                      updatemenus=updatemenus); fig

Что дает следующие графики с интерактивными кнопками:

fig3 enter image description here enter image description here enter image description here

Нажмите кнопку «Обновить», чтобы узнать больше :)

1 голос
/ 05 апреля 2020

Я наконец-то получил то, что искал, на самом деле очень просто, мне просто нужно было, чтобы мои grape и apple были не внутри столбца fruit, а как разные столбцы и обрабатывали их с помощью add_trace. Установка одного как невидимого. В каждом add_trace я мог свободно играть с цветом, шириной и т. Д. c. После этой организации стало проще работать с кнопкой. Я надеюсь, что это простое кодирование может кому-то помочь. Если не извините.

dfake <- tibble(days = seq(1,100, by=1),
                grape = seq(1,500, by=5),
                apple = seq(501,1000, by=5))
fig <- plot_ly(dfake, x = ~days) %>%
        add_trace(y = ~grape, name = 'Bask',
                  mode = 'lines+markers', type = "scatter",
                  marker = list(color = 'blue'),
                  line = list(color = 'blue', width = 4)) %>%
        add_trace(y = ~apple, name = 'New', visible = F,
                  mode = 'lines+markers', type = "scatter",
                  marker = list(color = 'red'),
                  line = list(color = 'red', width = 4)) %>%
        layout(
                title = "Corona global Cases and Depths",
                xaxis = list(domain = c(0.1)),
                yaxis = list(title = "yaxis"),
                updatemenus = list(
                        list(y = 0.9,
                             buttons = list(
                                     list(method = "restyle",
                                          args = list("visible", list(TRUE, FALSE)),
                                          label = "Grape"),
                                     list(method = "restyle",
                                          args = list("visible", list(FALSE, TRUE)),
                                          label = "Apple")))))
fig
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...