如何自定义最小和最大顶点大小时,打印igraph对象和创建图例在选定的顶点大小

y1aodyip  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(83)

下面是一个有10个顶点的igraph对象,每个顶点都被分配了两种颜色中的一种。我想绘制这个图,顶点的大小随一个名为val的变量而变化,这个变量是一个长度为10的向量,范围从1到10,对应于图中的10个顶点。

library(igraph)

g <- make_ring(10)

val = 1:10
pal <- c("pink", "steelblue")
V(g)$color <- c(rep("pink", 5), rep("steelblue", 5))

pdf("aa.pdf", width = 7, height = 7)
plot(g, layout = layout_with_fr, 
     vertex.size = val, cex = 0.5,
     vertex.frame.color = NA, edge.color = adjustcolor("#c7c7c7", alpha.f = 0.9))
legend(-1.3, -0.9, legend = val, 
       pch = 21, 
       pt.bg = pal, # Color of filled legend
       col = pal, # Color of legend symbol border
       bty="n", #Remove legend border
       # horiz = T, 
       ncol = 5
       )
dev.off()

字符串
下面是输出图:

如果我理解正确的话,图中第10个顶点的大小是val[10],也就是10。图中第一个顶点的大小是val[1],也就是1。Q1:如何自定义顶点的大小,使顶点大小仍然按val变化,但最大的顶点大小(即,第10个顶点)用点大小15绘制,并且最小顶点大小(即,第一个顶点)用点大小2绘制,并且其他顶点大小相应地以某种方式在2和15之间缩放?

第二季度:另外,如何创建一个**黑色(非彩色)**点的图例,仅显示val值为1、4、8和10的顶点的大小?

pcww981p

pcww981p1#

使用tidygraph/ggraph生态系统,这种级别的自定义要容易得多:

library(igraph)
library(tidygraph)
library(ggraph)

make_ring(10) %>%
  as_tbl_graph() %>%
  mutate(val = 1:10, color = rep(c('pink', 'steelblue'), each = 5)) %>%
  ggraph() +
  geom_edge_link() +
  geom_node_point(aes(size = val, fill = color), shape = 21) +
  geom_node_text(aes(label = val)) +
  scale_fill_identity() +
  scale_size_area(max_size = 15, breaks = c(1, 4, 8, 10),
                  guide = guide_legend(override.aes = list(fill = 'black'))) +
  coord_equal(clip = 'off') +
  theme_graph() +
  theme(legend.position = 'bottom')

字符串
x1c 0d1x的数据

相关问题