我想为同一数据框中的不同数据集制作物种积累曲线
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 寻求帮助,但也没有帮助。
另外,如何将它们全部组合成一张图表?
我有一个可复制的数据片段,但不知道如何将其上传到此处。
我认为你可以通过调整这里的答案来实现你想要的目标。
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))
排列这些图。