ggplot2 版本的 shepard plot,即 vegan::stressplot()?
ggplot2 version of shepard plot, i.e. vegan::stressplot()?
似乎有很多关于使用 ggplot2
绘制 NMDS 输出(即 NMDS1 与 NMDS1)的信息,但是我找不到使用 vegan::stressplot()
(谢泼德图)的方法 ggplot2
.
有没有办法生成 metaMDS
输出的 ggplot2
版本?
可重现代码
library(vegan)
set.seed(2)
community_matrix = matrix(
sample(1:100,300,replace=T),nrow=10,
dimnames=list(paste("community",1:10,sep=""),paste("sp",1:30,sep="")))
example_NMDS=metaMDS(community_matrix, k=2)
stressplot(example_NMDS)
由 reprex package (v2.0.1)
于 2021-09-17 创建
这里有一个变通方法,可以使用 ggplot2
绘制非常相似的图。诀窍是获取 stressplot(example_NMDS)
的结构并提取存储在该对象中的数据。我使用了包含 ggplot
的 tidyverse
包和包含 pivot_longer
函数的其他包,例如 tidyr
。
library(vegan)
library(tidyverse)
# Analyze the structure of the stressplot
# Notice there's an x, y and yf list
str(stressplot(example_NMDS))
# Create a tibble that contains the data from stressplot
df <- tibble(x = stressplot(example_NMDS)$x,
y = stressplot(example_NMDS)$y,
yf = stressplot(example_NMDS)$yf) %>%
# Change data to long format
pivot_longer(cols = c(y, yf),
names_to = "var")
# Create plot
df %>%
ggplot(aes(x = x,
y = value)) +
# Add points just for y values
geom_point(data = df %>%
filter(var == "y")) +
# Add line just for yf values
geom_step(data = df %>%
filter(var == "yf"),
col = "red",
direction = "vh") +
# Change axis labels
labs(x = "Observed Dissimilarity", y = "Ordination Distance") +
# Add bw theme
theme_bw()
似乎有很多关于使用 ggplot2
绘制 NMDS 输出(即 NMDS1 与 NMDS1)的信息,但是我找不到使用 vegan::stressplot()
(谢泼德图)的方法 ggplot2
.
有没有办法生成 metaMDS
输出的 ggplot2
版本?
可重现代码
library(vegan)
set.seed(2)
community_matrix = matrix(
sample(1:100,300,replace=T),nrow=10,
dimnames=list(paste("community",1:10,sep=""),paste("sp",1:30,sep="")))
example_NMDS=metaMDS(community_matrix, k=2)
stressplot(example_NMDS)
由 reprex package (v2.0.1)
于 2021-09-17 创建这里有一个变通方法,可以使用 ggplot2
绘制非常相似的图。诀窍是获取 stressplot(example_NMDS)
的结构并提取存储在该对象中的数据。我使用了包含 ggplot
的 tidyverse
包和包含 pivot_longer
函数的其他包,例如 tidyr
。
library(vegan)
library(tidyverse)
# Analyze the structure of the stressplot
# Notice there's an x, y and yf list
str(stressplot(example_NMDS))
# Create a tibble that contains the data from stressplot
df <- tibble(x = stressplot(example_NMDS)$x,
y = stressplot(example_NMDS)$y,
yf = stressplot(example_NMDS)$yf) %>%
# Change data to long format
pivot_longer(cols = c(y, yf),
names_to = "var")
# Create plot
df %>%
ggplot(aes(x = x,
y = value)) +
# Add points just for y values
geom_point(data = df %>%
filter(var == "y")) +
# Add line just for yf values
geom_step(data = df %>%
filter(var == "yf"),
col = "red",
direction = "vh") +
# Change axis labels
labs(x = "Observed Dissimilarity", y = "Ordination Distance") +
# Add bw theme
theme_bw()