如何基于R dataframe数据配置igraph饼图顶点所需的数值向量
R语言实现方案
1. 生成列表格式的合并向量列
tidyverse方案(最易读易扩展)
使用dplyr的行分组语法即可快速生成每一行对应多列数值组成的列表列,适配任意列数的合并需求:
library(dplyr) # 合并Red、Blue两列为向量列表 df <- df %>% rowwise() %>% mutate(RedBlue = list(c(Red, Blue))) %>% ungroup() # 如果需要合并更多颜色列,可灵活调整选择逻辑 df <- df %>% rowwise() %>% mutate(all_color = list(c_across(Red:Yellow))) %>% ungroup()
原生R方案(无需加载依赖)
如果不想引入第三方包,可用矩阵拆分的方式实现:
df$RedBlue <- split(as.matrix(df[, c("Red", "Blue")]), seq(nrow(df)))
两种方案输出的df$RedBlue都是要求的列表格式,每一个元素是对应行的数值向量。
2. igraph绘制饼图顶点的标准实现
igraph原生支持pie类型的顶点形状,无需额外处理,直接把生成的向量列表赋值给顶点的pie属性即可:
library(igraph) # 构造示例网络(可替换为你自己的网络对象) g <- make_full_graph(nrow(df)) # 绑定顶点元数据 V(g)$name <- df$vName V(g)$pie <- df$RedBlue # 设置饼图各分段的对应颜色 V(g)$pie.color <- list(c("red", "blue")) # 绘图 plot(g, vertex.shape = "pie", vertex.size = 30, vertex.label = V(g)$name, vertex.label.dist = 2)
如果需要绘制三色饼图,只需把V(g)$pie替换为三列合并的向量列表,同时pie.color对应传入三个颜色值即可。
内容的提问来源于stack exchange,提问作者charrlab
相关产品推荐
相关产品推荐

