在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
相关产品推荐
相关产品推荐

