Plotly R - интерактивный фильтр и дискретный цвет по группам - PullRequest
0 голосов
/ 15 октября 2018

У меня проблемы с plotly в R. Я создаю rmarkdown и использую функцию updatemenus & transforms, чтобы добавить выпадающий список.Я сделал несколько фиктивных данных, чтобы высветить проблему, с которой я столкнулся.

Я хочу иметь возможность контролировать цвета дискретным способом.У меня есть 3 человека в каждой группе, и я хочу, чтобы у них был одинаковый набор цветов при смене группы.поэтому цвет a = цвет d в этом случае;б = е, с = е.

На самом деле у меня намного больше групп, поэтому, когда я настраиваю этот сюжет, мои цвета внутри группы почти не меняются, и это выглядит непрофессионально.

Пример кода приведен ниже, любые идеи, как это сделать, будут великолепны.В противном случае мне придется попробовать переписать с помощью ggplot и ggplotly, которые, на мой взгляд, выглядят менее отточенными, и я пытаюсь использовать функции plotly там, где могу.

library(plotly)
library(RColorBrewer)
# make data. Assign first set a-c to group 1, d-f to group 2
set.seed(1)
df <- data.frame(individual = sample(letters[1:6], 100, replace = TRUE),
                 x = runif(100), stringsAsFactors = FALSE)
groups <- c("g1", "g2")
df$group[match(df$individual, letters) <= 3] <- groups[1]
df$group[match(df$individual, letters) > 3] <- groups[2]
df$y <- df$x*(match(df$individual, letters))
df <- df[order(df$individual),]

# can see data is split ok
table(df$group, df$individual)

# build up interactive element, the filter to the two groups
button_list <- lapply(1:length(groups), function(x){
  list(method = "restyle",
       args = list("transforms[0].value", groups[x]),
       label = groups[x])
})
type_list <-  list(
  type = 'dropdown',
  active = 0,
  xanchor = 'center',
  yanchor = "top",
  pad = list('r'= 0, 't'= 10, 'b' = 10),
  x = 0.5,
  y = 1.27,
  buttons = button_list
)

# make plot, color based on the individual in the group
plot_ly(df, x = ~x, y = ~y, mode = "lines+markers",
        color = ~ individual, 
        colors = brewer.pal(3, "Set1"),
        hoverinfo = "text", text = ~paste(individual),
        transforms = list(
          list(
            type = 'filter',
            target = ~group,
            operation = '=',
            value = df$group[1]
          ))
        ) %>%
          layout(updatemenus = list(
                   type_list
                 ))

Приветствия

1 Ответ

0 голосов
/ 15 октября 2018

быстро и грязно: заполните цвета «разрешенными» цветами

colors = rep( brewer.pal(3, "Set1"), 2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...