向图表节点添加标签 [英] Adding Labels to Graph Nodes

查看:14
本文介绍了向图表节点添加标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用";visNetwork";库制作了以下图表:

library(tidyverse)
library(igraph)


set.seed(123)
n=15
data = data.frame(tibble(d = paste(1:n)))

relations = data.frame(tibble(
  from = sample(data$d),
  to = lead(from, default=from[1]),
))

data$name = c("new york", "chicago", "los angeles", "orlando", "houston", "seattle", "washington", "baltimore", "atlanta", "las vegas", "oakland", "phoenix", "kansas", "miami", "newark" )

graph = graph_from_data_frame(relations, directed=T, vertices = data) 


 #red circle: starting point and final point
V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")

plot(graph, layout=layout.circle, edge.arrow.size = 0.2, main = "my_graph")

library(visNetwork)

    a = visIgraph(graph)  

m_1 = 1
m_2 = 23.6

 a = toVisNetworkData(graph) %>%
    c(., list(main = paste0("Trip ", m_1, " : "), submain = paste0 (m_2, "KM") )) %>%
    do.call(visNetwork, .) %>%
    visIgraphLayout(layout = "layout_in_circle") %>% 
    visEdges(arrows = 'to') 

  • 我现在正在尝试根据它们出现的顺序为每个单独的节点添加数字标签(即红圈&始终为1,跟随箭头直到2,依此类推):

我尝试在数据文件中添加一个额外的列,以包括这些数字(每个数字标签和数字对应于访问城市的顺序):

#is there an "automatic" way to do this? i did this manually:
data$label = c(11, 5, 2, 12, 7, 6, 10, 14, 15, 4, 12, 9, 13, 3,1)

然后我尝试将";数字标签和";名称标签&(即城市)添加到VisNetwork图中的节点:

V(graph)$name = data$label = c(11, 5, 2, 12, 7, 6, 10, 14, 15, 4, 12, 9, 13, 3,1)

plot(graph, layout=layout.circle, edge.arrow.size = 0.2, main = "my_graph")

library(visNetwork)

    a = visIgraph(graph)  

m_1 = 1
m_2 = 23.6

 a = toVisNetworkData(graph) %>%
    c(., list(main = paste0("Trip ", m_1, " : "), submain = paste0 (m_2, "KM") )) %>%
    do.call(visNetwork, .) %>%
    visIgraphLayout(layout = "layout_in_circle") %>% 
    visEdges(arrows = 'to') 

a

但它给我一个错误:

Error in `.rowNamesDF<-`(x, value = value) : 
  duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique value when setting 'row.names': ‘12’ 

最后,我还是想制作这个图表(使用visNetwork):

有没有其他方法可以做到这一点?

谢谢!

推荐答案

错误原因是没有%8,%2%12。

sort(c(11, 5, 2, 12, 7, 6, 10, 14, 15, 4, 12, 9, 13, 3, 1))
# [1]  1  2  3  4  5  6  7  9 10 11 12 12 13 14 15
# missing 8, two 12

动态获取订单--(这使用您在上面的代码中创建的第一个a对象)

library(tidyverse)

# collect the correct order

df2 <- data %>% 
  mutate(d = as.numeric(d),
         nuname = factor(a$x$edges$from, 
                         levels = unlist(data$name))) %>%
  arrange(nuname) %>% 
  select(d) %>% unlist(use.names = F)
#  [1] 11  5  2  8  7  6 10 14 15  4 12  9 13  3  1 

如果按照在此处编写代码的方式设置标签,则将覆盖当前拥有的标签。

有几个选项:保持原样、合并标签或您知道但我不知道的内容。

使用这些值和您的代码:

V(graph)$name = data$label = df2

为您提供:

要组合标签,您可以:

V(graph)$name = data$label = paste0(df2, "
", data$name)

这为您提供了:

这篇关于向图表节点添加标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆