绘制没有竖线的物种积累曲线

问题描述 投票:0回答:1

我想为同一数据框中的不同数据集制作物种积累曲线

datacum<- read.csv("FObrut.csv",head=T,sep=";")
Year<-as.factor(datacum$Year)
datacum$Year<-as.factor(datacum$Year)
str(datacum) 

accum_curve11w <- specaccum(datacum[1:11,4:48], method = "random")
accum_curve12s <- specaccum(datacum[12:35,48], method = "random")
accum_curve13w <- specaccum(datacum[48:56,4:48], method = "random")
accum_curve13s <- specaccum(datacum[36:47,4:48], method = "random")

w11<-plot(accum_curve11w, main = "w11", xlab = "Number of Samples", ylab = "Cumulative Species Count")
s12<-plot(accum_curve12s, main = "s12", xlab = "Number of Samples", ylab = "Cumulative Species Count")
s13<-plot(accum_curve13s, main = "s13", xlab = "Number of Samples", ylab = "Cumulative Species Count")
w13<-plot(accum_curve13w, main = "w13", xlab = "Number of Samples", ylab = "Cumulative Species Count")

plot(accum_curve11w, col = "black", lwd = 3, 
     xlab = "Number of Samples", ylab = "Cumulative Species Count", 
     main = "Species Accumulation Curve")
lines(accum_curve11w$sites, accum_curve11w$richness, col = "red", lwd = 2)  # Customize the line's color and width

一旦我绘制了一条累积曲线,我希望它是一个阴影区域,而不是垂直线(参见下面的示例)。我一直在寻找一种解决方案,但未能找到。我向 ChatGPT 寻求帮助,但也没有帮助。 example1

我该怎么做才能获得正确的格式?我试图让它看起来像这样: example2

另外,如何将它们全部组合成一张图表?

我有一个可复制的数据片段,但不知道如何将其上传到此处。

r
1个回答
0
投票

我认为你可以通过调整这里的答案来实现你想要的目标。

1) 由于您不提供数据,我们使用

BCI
的内置数据集
{vegan}
创建了一些无意义的数据。 2) 要设置默认值,我们找到存储在
range
中的所有四个数据系列中的
y
数据的
l
。这可以做得更简洁;请注意,我们只是将
sapply
替换为
unlist(lapply(>sth<))
3)我们选择一些颜色;请根据您的需求和喜好进行调整。了解离散调色板4.0) 我们使用
accum_curve11w
的合理选择来绘制
ylim
,以便附加数据将在
y
范围内。我们还设置了参数
ci.type
col
ci.col
4.1) 我们添加
accum_curve12s
accum_curve13w
accum_curve13s
lapply()
。这也可以通过
for
循环来完成。为此,我们将
add
的参数
plot()
设置为
TRUE
invisible()
并不是真正需要的。 4.2) 我们在顶部放置一个水平对齐的图例。请根据您的需要进行调整。
legend()
相当强大。

 # 1) 
 library(vegan)
 data(BCI)
 accum_curve11w = specaccum(BCI[1:12,4:48], "random")
 accum_curve12s = specaccum(BCI[13:25,48], "random") 
 accum_curve13w = specaccum(BCI[26:38,4:48], "random") 
 accum_curve13s = specaccum(BCI[39:50,4:48], "random")
 l = mget(ls(pattern = "accum_curve"))
 
 # 2)
 ylm = range(unlist(lapply(l, "[[", "richness")) + unlist(lapply(l, "[[", "sd")))
 
 # 3) 
 c1 = rainbow(length(l)) 
 c2 = rainbow(length(l), alpha = .3) 
 
 # 4.0)
 plot(l[[1]], ci.type = "poly", col = c1[1], ci.col = c2[1], ylim = ylm, 
      xlab = "Number of Samples", ylab = "Cumulative Species Count")
 
 # 4.1)
 lapply(seq_along(l)[-1], 
        \(i) plot(l[[i]], add = TRUE, ci.type = "poly", col = c1[i], ci.col = c2[i])) # |> invisible()
 
 # 4.2)
 legend("bottomright", inset = c(0,1), xpd = TRUE, horiz = TRUE, cex = .5, 
        legend = names(l), col = c1, lty = 1)

在我看来,这个数字很难理解。最好为每个数据系列生成一个图,并用

layout()
par(mfrow = c(2, 2))
排列这些图。

© www.soinside.com 2019 - 2024. All rights reserved.