Я использую блестящий и plot_ly
для построения data frame
.
Цель : реализовать динамический сюжет в зависимости от выбора пользователей в GUI
.
Рассмотрим следующее data.table
с именем pl.d
Group OS NP own.OS own.SCR HY9 WS8
A 34 54 27 76 56 82
B 15 45 0 84 89 48
C 0 36 7 92 91 22
в server.R
я использовал
plot_ly(pl.d, x = ~Group, y = ~OS, type = 'bar', name = "OS" ) %>%
layout(showlegend = TRUE)
Пользователь должен иметь возможность расширить график таким образом, чтобы у мог быть произвольный выбор c(OS, NP, own.OS, own.SCR, HY9, WS8)
.
Один неумный возможный подход заключается в расширении функции plot_ly
с помощью
if (input$choice of user =="NP"){
add_trace(y = ~NP, name = "NP")
}
и if conditions
и т. Д.
Есть ли какая-нибудь умная возможность написать умный динамический код для этого?
Это не имеет отношения к "NP". Я имею в виду, что plot_ly
или add_trace
должны в принципе показывать один или несколько из c(OS, NP, own.OS, own.SCR,HY9,WS8)
.
Я могу написать это следующим образом:
plot_ly(pl.d, x = ~Group, y = ~OS, type = 'bar', name = "OS" ) %>%
add_trace(y = ~NP, name = "NP") %>%
add_trace(y = ~own.OS, name = "own.OS") %>%
add_trace(y = ~own.SCR, name = "own.SCR") %>%
add_trace(y = ~HY9, name = "HY9") %>%
add_trace(y = ~WS8, name = "WS8")%>%
layout(showlegend = TRUE)
Проблема : Если вы опустите одно из c(OS, NP, own.OS, own.SCR,HY9,WS8)
, вы получите ошибку!
Одно из возможных решений: разбить фрейм данных на векторы! Использование функции melt
делает возможным, однако я не получаю векторы просто еще одну форму таблицы данных! Пожалуйста, примите во внимание, что моя исходящая точка pl.d
и не data.frame(Group =c(...), ....)
!
Итак, я попробовал следующее
pl.d<-data.frame(Group =melt(setDT(d.plot), id.var = 'Group ')[,1],
model=melt(setDT(d.plot), id.var = 'Group ')[,2],
value=melt(setDT(d.plot), id.var = 'Group ')[,3])
а затем
plot_ly(pl.d, x = ~Group, y = ~value, type = 'bar', color= ~model ) %>%
add_trace(y = ~value, name = "NP")
Тем не менее, я не получаю, например, столбцы, принадлежащие A близко друг к другу.
Приложение: Моя ошибка заключалась в том, что я использовал color= ~model
Мне пришлось использовать color=~Variable as mentioned in the answer! BUT why? I set it in my data frame as
модель` !!