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

在RStudio绘制祖先成分条形图时遇‘incorrect number of names’错误求助

解决R中绘制祖先成分堆叠条形图的“incorrect number of names”错误

错误原因

你遇到的“incorrect number of names”错误源于names.arg参数的长度与条形数量不匹配:

  • 你手动定义的Poblacion向量有5个元素,但数据集里的个体数量(即需要绘制的条形数量)并非5个,两者长度不一致导致报错。
  • 你应该使用数据集中实际的个体所属种群列(datos$Poblacion)作为条形名称,而非自定义的无关向量。

修正后的代码

基础版本(按原始数据顺序绘制)

# 加载数据
datos <- read.table("admix.txt", header = TRUE)

# 提取祖先比例列转为矩阵
admix_matrix <- as.matrix(datos[, c("origen1", "origen2")])

# 定义祖先成分名称(用于图例)
ancestros <- c("Origen 1", "Origen 2")

# 绘制堆叠条形图
barplot(t(admix_matrix), 
        col = rainbow(ncol(admix_matrix)), 
        xlab = "Individuo", 
        ylab = "Proporción", 
        names.arg = datos$Poblacion)  # 使用数据中实际的种群名称作为条形标签

# 添加图例说明各成分
legend("topright", legend = ancestros, fill = rainbow(ncol(admix_matrix)))

进阶版本(按种群分组排序)

如果希望同一种群的个体集中展示,可以先对数据排序:

# 按种群列排序数据
datos_ordenados <- datos[order(datos$Poblacion), ]
admix_matrix_ordenado <- as.matrix(datos_ordenados[, c("origen1", "origen2")])

# 绘制排序后的堆叠条形图
barplot(t(admix_matrix_ordenado), 
        col = rainbow(ncol(admix_matrix_ordenado)), 
        xlab = "Individuo", 
        ylab = "Proporción", 
        names.arg = datos_ordenados$Poblacion)

legend("topright", legend = ancestros, fill = rainbow(ncol(admix_matrix_ordenado)))

额外提示

  • 明确指定要使用的列(如c("origen1", "origen2"))比用-(1)更安全,避免后续数据列顺序变动导致错误。
  • rainbow()函数会生成区分度较高的颜色,若需要更专业的配色,可以自定义颜色向量(如col = c("#1f77b4", "#ff7f0e"))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:55:16