我发现很难将带有DCA的站点的标签放置在自动绘图或in图中。
我还想根据它们的组来区分自动绘图/ggplot上的各个点。
这是我所使用的数据和代码,它运行良好,直到自动绘图/ggplot命令为止:
library(vegan)
data(dune)
d <- vegdist(dune)
csin <- hclust(d, method = "single")
cl <- cutree(csin, 3)
dune.dca <- decorana(dune)
autoplot(dune.dca)这是获得的自动绘图:

我使用的是简单的编码,我尝试了这些代码,但它们并没有引导我找到任何地方:
autoplot(dune.dca, label.size = 3, data = dune, colour = cl)
ggplot(dune.dca(x=DCA1, y=DCA2,colour=cl))
ggplot(dune.dca, display = ‘site’, pch = 16, col = cl)
ggrepel::geom_text_repel(aes(dune.dca))如果有人有一个简单的建议,那就太好了。
发布于 2021-02-13 08:55:32
通过添加的信息(包),我能够深入挖掘。
问题是(简而言之),autoplot.decorana将数据添加到特定层( geom_point或geom_text)。这不会继承到其他层,因此添加其他层会导致空白页。
基本上,请注意下面两个代码字符串中的一个会导致错误,并注意data参数的位置:
# Error:
ggplot() +
geom_point(data = mtcars, mapping = aes_string(x = 'hp', y = 'mpg')) +
geom_label(aes(x = hp, y = mpg, label = cyl))
# Work:
ggplot(data = mtcars) +
geom_point(mapping = aes_string(x = 'hp', y = 'mpg')) +
geom_label(aes(x = hp, y = mpg, label = cyl))ggvegan:::autoplot.decorana将数据放置在示例中,返回一个错误。
我看到了两种解决这个问题的方法:
mapping.
ggplot_build或layer_data提取图层数据,并创建一个整体或单层(生成数据的代码),并手动创建我们的绘图(不使用老实说,我认为第二个更简单,因为我们可能需要提取更多的信息,以使我们的数据合理。通过查看ggvegan:::autoplot.decorana的源代码(简单地将其打印到控制台,去掉括号),我们可以提取下面的代码,生成与图中使用的数据相同的数据。
ggvegan_data <- function(object, axes = c(1, 2), layers = c("species", "sites"), ...){
obj <- fortify(object, axes = axes, ...)
obj <- obj[obj$Score %in% layers, , drop = FALSE]
want <- obj$Score %in% c("species", "sites")
obj[want, , drop = FALSE]
}这样,我们就可以生成我们想要的任何图,有适当的映射,而不是单独的层映射。
dune.plot.data <- ggvegan_data(dune.dca)
p <- ggplot(data = dune.dca, aes(x = DCA1, DCA2, colour = Score)) +
geom_point() +
geom_text(aes(label = Label), nudge_y = 0.3)
p这给了我们我希望的是你想要的输出

https://stackoverflow.com/questions/66164593
复制相似问题