R绘图中的图例/颜色不匹配

R绘图中的图例/颜色不匹配,r,plot,legend,R,Plot,Legend,我在R中创建了几个绘图。偶尔,程序会将绘图中变量的颜色与图例中变量的颜色不匹配。在所附文件中(不幸的是,我还不能附加声誉的图像b/c),前两个图形被分配了一个黑色/红色的颜色方案。但是,第三个图表自动使用绿色/黑色,并使用黑色/红色保留图例。我不明白为什么会这样 我怎样才能防止这种情况发生? 我知道可以指定颜色,但我正在努力找到一个明确的方法来做到这一点 代码: plot(rank, abundance, pch=16, col=type, cex=0.8) legend(60,50,uniqu

我在R中创建了几个绘图。偶尔,程序会将绘图中变量的颜色与图例中变量的颜色不匹配。在所附文件中(不幸的是,我还不能附加声誉的图像b/c),前两个图形被分配了一个黑色/红色的颜色方案。但是,第三个图表自动使用绿色/黑色,并使用黑色/红色保留图例。我不明白为什么会这样

我怎样才能防止这种情况发生? 我知道可以指定颜色,但我正在努力找到一个明确的方法来做到这一点

代码:

plot(rank, abundance, pch=16, col=type, cex=0.8)
legend(60,50,unique(type),col=1:length(type),pch=16)

plot(rank, abundance, pch=16, col=Origin, cex=0.8)
legend(60,50,unique(Origin),col=1:length(Origin),pch=16)


Below is where color pattern won't match

plot(rank, abundance, pch=16, col=Lifecycle, cex=0.8)
legend(60,50,unique(Lifecycle),col=1:length(Lifecycle),pch=16)
数据框如下所示:

Plant    rank   abundance  Lifecycle    Origin   type
X         1         23       Perennial   Native  Weedy
Y         2         10       Annual      Exotic  Ornamental
Z         3         9        Perennial   Native  Ornamental

首先,我创建了一些虚假数据

 df <- data.frame(rank = 1:10, abundance = runif(10,10,100), 
       Lifecycle = sample(c('Perennial', 'Annual'), 10, replace=TRUE))
然后,我使用因子
df$Lifecycle
绘制颜色点

plot(df$rank, df$abundance, col = cols[df$Lifecycle], pch=16)
当上面使用系数
df$Lifecycle
时,它将其转换为对
cols
的数字引用,以便按字母顺序对值进行排序。因此,在图例中,我们只需要对唯一的
df$Lifecycle
值进行排序,然后将颜色向量(
cols
)交给它


希望这能有所帮助

也许
生命周期中有两个以上的因子级别
或者一个
NA
或两个混合的
调色板()
会告诉您因子使用的颜色顺序,或者查看
绘图(1:10,col=1:10)
。尝试在图例中更改为
col=unique(Lifecycle)
。这一点很好。我的评论是不正确的,因为如果有一个
NA
混合在一起,它会被绘制在图例中@nongkrong的建议(隔离独特价值)应该有效。如果您想绝对确定,您可以在绘图和图例命令中使用
sort(unique(Lifecycle))
,这将删除
NA
s并对因子级别进行排序。@Tad Dallas您介意将其作为一个答案发布吗?我将发布一个更连贯/错误更少的版本,以说明我在评论中所描述的内容。哈哈。请随意编辑它。
plot(df$rank, df$abundance, col = cols[df$Lifecycle], pch=16)
legend(5, 40, sort(unique(df$Lifecycle)), col=cols, pch=16, bty='n')