DCA:使用自动绘图或 ggplot2 标记点
DCA : Labelling points with autoplot or ggplot2
我发现很难在自动绘图或 ggplot 中为具有 DCA 的站点添加标签。
我也想把autoplot/ggplot上的点按照他们的分组来区分。
这是我使用的数据和代码,在 autoplot/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))
如果有人有简单的建议,那就太好了。
通过添加的信息(包),我能够进行更深入的挖掘。
问题是(简而言之)autoplot.decorana
将数据添加到特定层(geom_point
或 geom_text
)。这不会继承到其他层,因此添加其他层会导致空白页。
基本上注意到下面的 2 个代码字符串之一会导致错误,并注意 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
将示例中的数据放置 returns 错误。
我看到有 2 种方法可以解决这个问题:
- 使用
ggplot_build
或layer_data
提取层数据并创建整体或单层映射。
- 提取生成数据的代码,并手动创建我们的绘图(不使用
autoplot
)。
老实说,我认为第二种更简单,因为我们可能必须提取更多信息才能使我们的数据有意义。通过查看 ggvegan:::autoplot.decorana
的源代码(简单地通过省略括号将其打印到控制台)我们可以提取下面的代码,它生成与 plot
中使用的相同的数据
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
这给了我们我希望的是你想要的输出
我发现很难在自动绘图或 ggplot 中为具有 DCA 的站点添加标签。
我也想把autoplot/ggplot上的点按照他们的分组来区分。
这是我使用的数据和代码,在 autoplot/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))
如果有人有简单的建议,那就太好了。
通过添加的信息(包),我能够进行更深入的挖掘。
问题是(简而言之)autoplot.decorana
将数据添加到特定层(geom_point
或 geom_text
)。这不会继承到其他层,因此添加其他层会导致空白页。
基本上注意到下面的 2 个代码字符串之一会导致错误,并注意 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
将示例中的数据放置 returns 错误。
我看到有 2 种方法可以解决这个问题:
- 使用
ggplot_build
或layer_data
提取层数据并创建整体或单层映射。 - 提取生成数据的代码,并手动创建我们的绘图(不使用
autoplot
)。
老实说,我认为第二种更简单,因为我们可能必须提取更多信息才能使我们的数据有意义。通过查看 ggvegan:::autoplot.decorana
的源代码(简单地通过省略括号将其打印到控制台)我们可以提取下面的代码,它生成与 plot
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
这给了我们我希望的是你想要的输出