图中 legend/figure 不匹配

mismatch between legend/figure in plot

首先,抱歉,我知道之前有人问过这个问题,但 none 我发现的解决方案似乎对我有用...R 会顽固地拒绝在中绘制正确的颜色我的传奇

我有以下数据

V11.y PC1 PC2 V6.y V7.y V8.y V9.y V10.y
1 Abditibacterium -7.528935e+14 -3.092266e+14 Bacteria Abditibacteriota Abditibacteria Abditibacteriales Abitibacteriaceae
2 Abidjanvirus -7.557715e+14 -3.109203e+13 Viruses unclassified unclassified Caudovirales Siphoviridae
3 Abiotrophia -7.491173e+14 -3.047456e+14 Bacteria Firmicutes Bacilli Lactobacillales Aerococcaceae
4 Abrus -7.557715e+14 -3.109203e+14 Eukaryota Streptophyta Magnoliopsida Fabales Fabaceae
5 Abscondita -7.537974e+14 -3.098546e+14 Eukaryota Arthropoda Insecta Coleoptera Lampyridae
6 Absicoccus -5.600170e+13 -1.933629e+14 Bacteria Firmicutes Erysipelotrichia Erysipelotrichales Erysipelotrichaceae
7 Absidia -7.555506e+14 -3.105756e+14 Eukaryota Mucoromycota Mucoromycetes Mucorales Cunninghamellaceae
8 Absiella -2.072363e+14 7.305995e+14 Bacteria Firmicutes Erysipelotrichia Erysipelotrichales Erysipelotrichaceae
9 Abyssibacter -7.543130e+14 -3.103792e+14 Bacteria Proteobacteria Gammaproteobacteria Salinisphaerales Salinisphaeraceae
10 Abyssicoccus -7.511899e+14 -3.069448e+14 Bacteria Firmicutes Bacilli Bacillales Staphylococcaceae
11 Abyssisolibacter -7.067138e+14 -2.700463e+14 Bacteria Firmicutes Clostridia Clostridiales Clostridiaceae
12 Acadevirus -7.557715e+14 -3.109203e+13 Viruses Uroviricota Caudoviricetes Caudovirales Autographiviridae
13 Acanthamoeba -7.534538e+14 -3.101502e+14 Eukaryota Discosea unclassified Longamoebia Acanthamoebidae
14 Acanthaster -7.557668e+13 -3.109202e+14 Eukaryota Echinodermata Asteroidea Valvatida Acanthasteridae

这只是 4600 行中的前 14 行

我正在尝试使用 PC1 和 PC2 坐标绘制 V11.y 并通过使用 V6.y 或 V7.y 甚至 [=37= 为它们着色].

这是我一直在尝试的:

plot(sitesplus$PC1, sitesplus$PC2, type="n")

sitesplus$V6.y=as.factor(sitesplus$V6.y)
text(sitesplus$PC1, sitesplus$PC2, labels = sitesplus$V11.y, col=c(sitesplus$V6.y))

legend("topleft",
   legend=sort(unique(sitesplus$V6.y)), 
   col=c(sitesplus$V6.y),
   pch=19,
   text.font=c(1),
   cex=1,
   bty="n")

我看到“细菌”是黑色的,“病毒”是绿色的,“真核生物”是红色的。但传说完全不同!

我也试过:

legend("topleft",
   legend=levels(sitesplus$V6.y), 
   col=c(sitesplus$V6.y),
   pch=19,
   text.font=c(1),
   cex=1,
   bty="n")

尽管在上述情况下我知道“级别”改变了顺序,但我无法找到一个简单的解决方案来完成这项工作!!!

顺便说一句,我无法指定 4 种颜色,因为这只是一个示例,在某些时候我将要绘制一百个不同的级别,因此提前指定颜色对我不起作用。

非常感谢任何帮助,谢谢。

当您调用 text 时,PC1PC2V6.ycol= 的参数)的长度都相同。在您对 legend 的调用中,您仍然为 col 包含相同长度的 V6.y,即使它确实需要长度 3(在本例中),每个颜色都需要一种(唯一)颜色变量中的 levels.

它显示了它做了什么,因为图例的文本只包含 3 个对象,所以它从 factor 中获取前三个整数。在这个示例数据中,它是c("Bacteria","Viruses","Bacteria"),或者c(1,3,1)(黑绿黑)。

试试这个,

plot(sitesplus$PC1, sitesplus$PC2, type="n")
text(sitesplus$PC1, sitesplus$PC2, labels = sitesplus$V11.y, col=c(sitesplus$V6.y))
legend("topleft",
   legend=levels(sitesplus$V6.y), 
   col=seq_along(levels(sitesplus$V6.y)),
   pch=19,
   text.font=c(1),
   cex=1,
   bty="n")