пытаясь отобразить метки узлов только на выбранных узлах.
Я нашел аналогичный вопрос, который хотел показывать только метки метки при наведении. Решением было следующее:
nodes <- data.frame(id = 1:3, label = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3), label = "Edge label", font.size = 0)
visNetwork(nodes, edges) %>%
visInteraction(hover = T) %>%
visEvents(hoverEdge = "function(e){
this.body.data.edges.update({id: e.edge, font: {size : 14}});
}") %>%
visEvents(blurEdge = "function(e){
this.body.data.edges.update({id: e.edge, font: {size : 0}});
}")
Я пробовал модифицировать это, но я не думаю, что я делаю часть javascript правильно, я знаю, что JS почти нет.
nodes <- data.frame(id = 1:3, label = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3), label = "Edge label", font.size = 0)
visNetwork(nodes, edges) %>%
visInteraction(hover = T) %>%
visEvents(selectNode= "function(e){
this.body.data.nodes.update({id: e.node, font: {size : 14}});
}") %>%
visEvents(deselectNode= "function(e){
this.body.data.nodes.update({id: e.node, font: {size : 0}});
}")
Это вместо этого создает новый узел при каждом выборе или отмене выбора узла. Хотя сидеть и нажимать на них было забавным способом разрушить мой Rsession, он, к сожалению, не решил мою проблему.
Я уверен, что это простое исправление, но я прошел через документацию visNetwork, и я просто не нахожу то, что мне нужно. Помогите оценить!
Это должно сделать трюк. Этот JS фактически создает переменную, основанную на обеих меток в фрейме данных. Я уверен, что есть более технический метод для этого, но он все равно должен работать нормально.
library(visNetwork)
nodes <- data.frame(id = 1:3, label = paste0(""), label_long = c('Label 1','Label 2','Label 3'))
edges <- data.frame(from = c(1,2), to = c(1,3), label = "Edge label", font.size = 0)
net <- visNetwork(nodes, edges) %>%
visInteraction(hover = T) %>%
visEvents(selectNode = "function(e){
var label_info = this.body.data.nodes.get({
fields: ['label', 'label_long'],
filter: function (item) {
return item.id === e.node
},
returnType :'Array'
});
this.body.data.nodes.update({id: e.node, label : label_info[0].label_long, label_long : label_info[0].label});
}") %>%
visEvents(blurNode = "function(e){
var label_info = this.body.data.nodes.get({
fields: ['label', 'label_long'],
filter: function (item) {
return item.id === e.node
},
returnType :'Array'
});
this.body.data.nodes.update({id: e.node, label : label_info[0].label_long, label_long : label_info[0].label});
}")
print(net)