R语言 SIBER包 如何修改community的线形和点型?

附上SIBER包:https://cran.r-project.org/web/packages/SIBER/vignettes/Introduction-to-SIBER.html

论文中看到不同的community可以用不同线型区分,并且点型也是非默认的

img

我自己做出来的只能将group用颜色区分,community是同色同线形

img


Shape <- read.csv('D:/Research/SIBER_2.1.6/mydata/Shape.csv', header = T )
siber.example <- createSiberObject(Shape)

community.hulls.args <- list(palette(c("#81b8df","#fe827e")), lty = 1, lwd = 1)
group.ellipses.args  <- list(n = 100, p.interval = 0.40, lty = c("solid"), lwd = 3)
group.hull.args      <- list(lty = 5, col = "gray60")

par(mfrow=c(1,1))
plotSiberObject(siber.example,
                ax.pad = 2, 
                hulls = F, community.hulls.args, 
                ellipses = T, group.ellipses.args,
                group.hulls = T, group.hull.args,
                bty = "o",
                iso.order = c(1,2),
                xlab = expression({delta}^13*C~'\u2030'),
                ylab = expression({delta}^15*N~'\u2030'),
                x.limits = c(-21,-10),
                y.limits = c(4,20)
                )

直接在community.hulls.args后加pch和lty没有反应,请问各位这种情况要怎么改?

该回答引用ChatGPT
要修改SIBER包中的community线形和点型,需要在创建SIBER对象之前使用自定义参数来指定线形和点型的样式。使用`createSiberObject()`函数中的`community.args`参数来指定线形,使用`community.tags.args`参数来指定点型。例如,以下代码可以用虚线和星号来表示两个不同的community:

r
library(SIBER)

# 读入数据
Shape <- read.csv('D:/Research/SIBER_2.1.6/mydata/Shape.csv', header = TRUE)

# 定义community的线形和点型
community.hulls.args <- list(palette(c("#81b8df","#fe827e")), lty = c(2,3), lwd = 2)
community.tags.args <- list(pch = c(8,3), cex = 1.5)

# 创建SIBER对象
siber.example <- createSiberObject(Shape,
community.args = community.hulls.args,
community.tags.args = community.tags.args)

# 绘制SIBER图
plotSiberObject(siber.example,
ax.pad = 2,
hulls = FALSE,
ellipses = TRUE,
group.ellipses.args = list(n = 100, p.interval = 0.40, lty = "solid", lwd = 3),
group.hulls = TRUE,
group.hull.args = list(lty = 5, col = "gray60"),
bty = "o",
iso.order = c(1,2),
xlab = expression({delta}^13*C ~ '\u2030'),
ylab = expression({delta}^15*N ~ '\u2030'),
x.limits = c(-21,-10),
y.limits = c(4,20))


在指定参数时,需要注意以下几点:

- `community.hulls.args`和`community.tags.args`都是列表,用于指定多个community的样式。
- `lty`和`pch`都需要用向量指定每个community的样式。例如,`lty = c(1,2)`表示第一个community使用实线,第二个community使用虚线;`pch = c(1, 2)`表示第一个community使用圆圈,第二个community使用三角形。
- 如果只有一个community,则可以使用单个参数,例如`lty = 2`表示使用虚线。

此外,如果试图在`community.hulls.args`后直接添加`pch`和`lty`参数,则会因为参数名称不匹配而出现错误。应该将它们添加到新的列表中。

在 R 语言中使用 siber 包绘制物种生态位图时,可以通过修改 community 参数的线型和点型来自定义绘图样式。具体步骤如下:

使用 siber() 函数创建一个 siber 对象:

scss
Copy code
library(siber)
data(siberia)
siber.obj <- siber(siberia, community = 1:4)
在这里,我们将 siberia 数据集分成了 4 个群落,并将 community 参数设置为 1:4。

使用 plot() 函数绘制物种生态位图:

scss
Copy code
plot(siber.obj, community = 1:4)
这里,我们使用 community 参数指定要绘制的群落。默认情况下,群落之间的线型和点型是相同的。

修改线型和点型:

要修改线型,可以使用 lty 参数。例如,以下代码将第一个群落的线型修改为虚线:

scss
Copy code
plot(siber.obj, community = 1:4, lty = c(2, 1, 1, 1))
这里,lty = c(2, 1, 1, 1) 表示第一个群落的线型为虚线,其他群落的线型为实线。

要修改点型,可以使用 pch 参数。例如,以下代码将第一个群落的点型修改为方块:

scss
Copy code
plot(siber.obj, community = 1:4, pch = c(15, 1, 1, 1))
这里,pch = c(15, 1, 1, 1) 表示第一个群落的点型为方块,其他群落的点型为圆点。

你可以通过修改 lty 和 pch 参数的值来实现自定义的线型和点型。

该回答引用于ChatGPT:
您好,感谢您对 SIBER 包的使用。如果您想要修改 SIBER 包绘图中 community 的线型和点型,可以尝试在 community.hulls.args 中添加 pchlty 参数来实现。

具体而言,可以按照以下方式设置 community.hulls.args

community.hulls.args <- list(
  palette(c("#81b8df", "#fe827e")), 
  lty = c(2, 3), # 指定 community 的线型为虚线和点划线
  lwd = 1,
  pch = c(16, 17) # 指定 community 点的形状为实心圆和空心三角形
)

注意,在设置 ltypch 参数时,需要给定与 community 数量相同的参数值,例如在上面的示例中给出了两个 lty 值和两个 pch 值,对应于 SIBER 包中的两个 community。

通过以上设置,您可以自定义 community 的线型和点型,从而更直观地展示不同 community 之间的差异。

希望这个回答对您有所帮助!如有任何问题,请随时追问。

以下内容部分参考ChatGPT模型:
要修改SIBER包中community的线形和点型,需要在plotSiberObject函数中添加community.points.args和community.lines.args参数。这两个参数分别控制community的点型和线形。例如,可以使用以下代码将第一个community的点型设置为实心三角形,线形设置为虚线:

community.points.args <- list(pch = 24, cex = 1.5)
community.lines.args <- list(lty = 2)

plotSiberObject(siber.example,
                ax.pad = 2, 
                hulls = F, community.hulls.args, 
                ellipses = T, group.ellipses.args,
                group.hulls = T, group.hull.args,
                community.points.args,
                community.lines.args,
                bty = "o",
                iso.order = c(1,2),
                xlab = expression({delta}^13*C~'\u2030'),
                ylab = expression({delta}^15*N~'\u2030'),
                x.limits = c(-21,-10),
                y.limits = c(4,20)
                )

这样就可以根据需要设置不同的点型和线形来区分不同的community了。
如果我的建议对您有帮助、请点击采纳、祝您生活愉快

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
要改变community的线形和点型,需要修改plotSiberObject函数中的代码。具体实现是使用par函数,设置要画的图形的参数,包括线型、颜色、点型等。在代码中添加以下内容可以实现将community用不同的线形和点型区分:

# 将communities用不同的线型区分
community.hulls.args <- list(
  palette = c("#81b8df", "#fe827e"), 
  lty = c(1, 2), # 设置不同的线形
  lwd = 1,
  pch = c(20, 22) # 设置不同的点型
)

完整的代码示例如下:

Shape <- read.csv('D:/Research/SIBER_2.1.6/mydata/Shape.csv', header = T)
siber.example <- createSiberObject(Shape)

# 将communities用不同的线型区分
community.hulls.args <- list(
  palette = c("#81b8df", "#fe827e"), 
  lty = c(1, 2),
  lwd = 1,
  pch = c(20, 22)
)
group.ellipses.args <- list(n = 100, p.interval = 0.40, lty = c("solid"), lwd = 3)
group.hull.args <- list(lty = 5, col = "gray60")

par(mfrow = c(1, 1))
plotSiberObject(
  siber.example,
  ax.pad = 2,
  hulls = F,
  community.hulls.args,
  ellipses = T,
  group.ellipses.args,
  group.hulls = T,
  group.hull.args,
  bty = "o",
  iso.order = c(1, 2),
  xlab = expression({delta}^13*C ~ '\u2030'),
  ylab = expression({delta}^15*N ~ '\u2030'),
  x.limits = c(-21, -10),
  y.limits = c(4, 20)
)

这样即可实现将不同的community用不同的线形和点型区分。需要注意的是,需要先将palettelty放在一起设置,再将pch设置,否则设置点型无效。
如果我的回答解决了您的问题,请采纳!