问题描述
首先,抱歉,我知道之前有人问过这个问题,但我发现的所有解决方案似乎都不适合我...... 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 甚至 V8.y 为它们着色。
这是我一直在尝试的:
plot(sitesplus$PC1,sitesplus$PC2,type="n")
sitesplus$V6.y=as.factor(sitesplus$V6.y)
text(sitesplus$PC1,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),bty="n")
即使在上述情况下,我知道“级别”会改变顺序,但我无法找到一个简单的解决方案来完成这项工作!!!
顺便说一句,我无法指定 4 种颜色,因为这只是一个示例,在某些时候我将有数百个不同的级别要绘制,因此提前指定颜色对我不起作用。
非常感谢任何帮助,谢谢。
解决方法
当您调用 text
时,PC1
、PC2
和 V6.y
(col=
的参数)的长度都相同。在您对 legend
的调用中,您仍然为 V6.y
包含相同长度的 col
,即使它确实需要长度 3(在这种情况下),每个颜色都有一个(唯一的)颜色变量中的 levels
。
它显示了它做了什么,因为图例的文本只包含 3 个对象,所以它从 factor
中获取前三个整数。在此示例数据中,它是 c("Bacteria","Viruses","Bacteria")
或 c(1,3,1)
(黑绿黑)。
试试这个,
plot(sitesplus$PC1,sitesplus$PC2,type="n")
text(sitesplus$PC1,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")