You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R与ggraph绘制自定义圆形图时遇数据框列数不足错误求助

解决graph_from_data_frame报错并构建HPV变体层级圆形图

错误原因

你遇到的报错是因为igraph::graph_from_data_frame()要求edges参数必须是至少包含两列的数据框,分别表示连接的起点(父节点)和终点(子节点)。而你现在只传入了HPV_subtypes$HPVseq_p这一列向量,完全不符合函数的输入要求。

修正步骤与代码

1. 数据预处理

首先清理数据中的无效"na"值,然后构建父节点(HPVseq_p)和子节点(HPVseq_s)的对应关系,同时去重避免重复连接:

# 加载所需包
library(ggraph)
library(igraph)
library(tidyverse)
library(viridis)

# 导入你的数据
mydata_compressed <- structure(list(Sample = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), HPVseq_p = c("HPV16", 
"HPV16", "HPV16", "HPV16", "HPV16", "HPV16", "HPV16", "HPV16", 
"HPV16", "HPV33"), HPVseq_s = c("HPV16", "HPV53", "HPV16", "HPV16", 
"HPV16", "HPV16", "HPV16", "HPV16", "HPV16", "na"), HPVdPCR_p = c("HPV16", 
"HPV16", "na", "HPV16", "HPV16", "HPV16", "HPV16", "HPV16", "HPV16", 
"HPV33"), HPVdPCR_s = c("HPV16", "HPV16", "HPV16", "HPV16", "HPV16", 
"HPV16", "HPV16", "na", "HPV16", "na")), row.names = c(NA, -10L
), class = c("tbl_df", "tbl", "data.frame"))

# 预处理:过滤无效值,构建父-子边数据框并去重
edges_df <- mydata_compressed %>%
  filter(HPVseq_p != "na", HPVseq_s != "na") %>%  # 去掉无效的na节点
  select(from = HPVseq_p, to = HPVseq_s) %>%      # 重命名为图要求的from/to格式
  distinct()  # 去重,避免重复的连接关系

# 整理节点属性:标记节点是父节点还是子节点
vertices_df <- edges_df %>%
  pivot_longer(cols = everything(), names_to = "type", values_to = "name") %>%
  mutate(type = ifelse(type == "from", "父节点", "子节点")) %>%
  distinct()

2. 构建igraph对象

用处理好的边和节点数据构建图对象:

mygraph <- graph_from_data_frame(d = edges_df, vertices = vertices_df, directed = TRUE)

3. 绘制层级圆形图

用ggraph的circlepack布局实现“大圆圈包含子圆圈”的效果:

ggraph(mygraph, layout = 'circlepack') +
  geom_node_circle(aes(fill = type, size = stat(size))) +
  geom_node_text(aes(label = name), size = 3) +
  scale_fill_viridis(discrete = TRUE) +
  theme_void() +
  labs(title = "HPV变体层级圆形图", fill = "节点类型")

关键说明

  • circlepack布局会自动根据父-子关系生成包含式的圆形结构,正好匹配你的需求
  • 去重操作能避免重复连接导致图结构冗余
  • 过滤"na"值是为了避免无效节点干扰图的正常构建

内容的提问来源于stack exchange,提问作者peaches523

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 20:22:45