如何在 R(素食包)的 NMDS 图中绘制不同颜色的站点?
How to plot sites in different colours in a NMDS plot in R (vegan package)?
我有来自草地(站点 1-14)和采石场(站点 15-28)站点的数据,并希望它们在我使用素食包创建的 NMDS 图中具有不同的颜色,例如。 G。站点编号 1-14 为红色,站点编号为 15-28 为蓝色。
我是 R 新手,不熟悉图形编辑。
vare.mds <- metaMDS(species, trace=FALSE)
plot(vare.mds, type = "n")
text(vare.mds, display = "sites")
假设样本按照您指定的顺序排列(第 1-14 行是草地,第 15-28 行是采石场)那么在基础图形中执行此操作的最简单方法是创建所需长度的因子变量:
grp <- factor(rep(c('grassland', 'quarry'), each = 14))
然后为两组创建一个颜色向量
cols <- c('red','black')
然后您可以使用 col
参数为 text()
调用创建的文本着色,这通常可用于大多数基本图形绘制函数。
要查看实际绘制时会发生什么,我们要做的是使用 grp
包含组成员资格的因子对颜色向量 cols
进行索引:
> cols[grp]
[1] "red" "red" "red" "red" "red" "red" "red" "red" "red"
[10] "red" "red" "red" "red" "red" "black" "black" "black" "black"
[19] "black" "black" "black" "black" "black" "black" "black" "black" "black"
[28] "black"
grp
存储为一个数值向量,其元素索引每个观察的水平:
> as.numeric(grp)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2
因此,在 cols[grp]
中,grp
成为一个数值向量,根据您的每个网站的需要分别索引第一种或第二种颜色。
因此,text()
将如下所示:
text(vare.mds, display = "sites", col = cols[grp])
在你的情况下,只需调用
就足够了
text(vare.mds, display = "sites", col = rep(cols, each = 14))
因为这些组被安排在连续的样本块中,但如果不是这种情况(如果您忘记以相同的方式对相关数据集进行排序,则求助不一定是一件好事)那么我上面描述的方法是有益的。
为了制作一个可直接重现的示例,这里是 vegan
提供的 varespec
数据集的全部工作
library('vegan')
data(varespec)
## varespec has on 24 observations so 1-12 will be grassland and 13-24 quarry
grp <- factor(rep(c('grassland', 'quarry'), each = 12))
## vector of colours
cols <- c('red', 'black')
set.seed(1)
ord <- metaMDS(varespec, trace=FALSE)
plot(ord, type = 'n')
text(ord, display = 'sites', col = cols[grp])
legend('bottomright', legend = tools::toTitleCase(levels(grp)),
fill = cols, bty = 'n')
产生
我有来自草地(站点 1-14)和采石场(站点 15-28)站点的数据,并希望它们在我使用素食包创建的 NMDS 图中具有不同的颜色,例如。 G。站点编号 1-14 为红色,站点编号为 15-28 为蓝色。
我是 R 新手,不熟悉图形编辑。
vare.mds <- metaMDS(species, trace=FALSE)
plot(vare.mds, type = "n")
text(vare.mds, display = "sites")
假设样本按照您指定的顺序排列(第 1-14 行是草地,第 15-28 行是采石场)那么在基础图形中执行此操作的最简单方法是创建所需长度的因子变量:
grp <- factor(rep(c('grassland', 'quarry'), each = 14))
然后为两组创建一个颜色向量
cols <- c('red','black')
然后您可以使用 col
参数为 text()
调用创建的文本着色,这通常可用于大多数基本图形绘制函数。
要查看实际绘制时会发生什么,我们要做的是使用 grp
包含组成员资格的因子对颜色向量 cols
进行索引:
> cols[grp]
[1] "red" "red" "red" "red" "red" "red" "red" "red" "red"
[10] "red" "red" "red" "red" "red" "black" "black" "black" "black"
[19] "black" "black" "black" "black" "black" "black" "black" "black" "black"
[28] "black"
grp
存储为一个数值向量,其元素索引每个观察的水平:
> as.numeric(grp)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2
因此,在 cols[grp]
中,grp
成为一个数值向量,根据您的每个网站的需要分别索引第一种或第二种颜色。
因此,text()
将如下所示:
text(vare.mds, display = "sites", col = cols[grp])
在你的情况下,只需调用
就足够了text(vare.mds, display = "sites", col = rep(cols, each = 14))
因为这些组被安排在连续的样本块中,但如果不是这种情况(如果您忘记以相同的方式对相关数据集进行排序,则求助不一定是一件好事)那么我上面描述的方法是有益的。
为了制作一个可直接重现的示例,这里是 vegan
提供的varespec
数据集的全部工作
library('vegan')
data(varespec)
## varespec has on 24 observations so 1-12 will be grassland and 13-24 quarry
grp <- factor(rep(c('grassland', 'quarry'), each = 12))
## vector of colours
cols <- c('red', 'black')
set.seed(1)
ord <- metaMDS(varespec, trace=FALSE)
plot(ord, type = 'n')
text(ord, display = 'sites', col = cols[grp])
legend('bottomright', legend = tools::toTitleCase(levels(grp)),
fill = cols, bty = 'n')
产生