У меня проблемы с 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
))
Приветствия