sites.long | R Documentation |
These functions organize outputs from ordiplot
, accumcomp
and renyicomp
so these can be plotted with ggplot
.
sites.long(x, env.data = NULL)
species.long(x, spec.data = NULL)
centroids.long(y, grouping, FUN = mean, centroids.only = FALSE)
vectorfit.long(z)
ordisurfgrid.long(z)
ordiellipse.long(z, grouping.name = "Grouping")
pvclust.long(cl, cl.data)
axis.long(w, choices = c(1, 2), cmdscale.model=FALSE, CAPdiscrim.model=FALSE)
accumcomp.long(x, ci = 2, label.freq = 1)
renyicomp.long(x, label.freq = 1)
renyi.long(x, env.data=NULL, label.freq = 1)
x |
Result of |
env.data |
Environmental descriptors for each site. |
spec.data |
Descriptors for each species. |
y |
Result of function sites.long. |
grouping |
Variable defining the centroids |
FUN |
A function to compute the summary statistics which can be applied to all data subsets, as in |
centroids.only |
Return the coordinates for the centroids |
z |
Result of |
grouping.name |
Name for the categorical variable, expected as the factor used in the earlier ordiellipse call. |
cl |
Result of |
cl.data |
Result of |
w |
Ordination object from which the |
choices |
Ordination axes selected, as in |
cmdscale.model |
Use |
CAPdiscrim.model |
Use |
ci |
Multiplier for confidence intervals as in |
label.freq |
Frequency of labels along the x-axis (count between labels). |
Examples for ordiplot results are shown below.
Function pvclust.long
combines data from pvclust
with coordinates of nodes and branches from ordicluster
. The variable of prune
allows to remove higher levels of nodes and branches in the clustering hierarchy in a similar way as argument prune
for ordicluster
- see examples.
See also section: see examples for species accumulation curves and Renyi diversity profiles
These functions produce data.frames that can subsequentially be plotted via ggplot
methods.
Roeland Kindt
Kindt, R. & Coe, R. (2005) Tree diversity analysis: A manual and software for common statistical methods for ecological and biodiversity studies.
https://www.worldagroforestry.org/output/tree-diversity-analysis
https://rpubs.com/Roeland-KINDT
accumcomp
, renyicomp
## Not run:
# ggplot2 plotting method
library(ggplot2)
library(ggforce)
library(concaveman)
library(ggrepel)
library(ggsci)
library(dplyr)
library(vegan)
data(dune)
data(dune.env)
attach(dune)
attach(dune.env)
Ordination.model1 <- capscale(dune ~ Management, data=dune.env,
distance='kulczynski', sqrt.dist=F, add='cailliez')
plot1 <- ordiplot(Ordination.model1, choices=c(1,2), scaling='species')
# obtain 'long' data from the ordiplot object
sites1 <- sites.long(plot1, env.data=dune.env)
species1 <- species.long(plot1)
centroids1 <- centroids.long(sites1, Management, FUN=median)
centroids2 <- centroids.long(sites1, Management, FUN=median, centroids.only=TRUE)
# information on percentage variation from the fitted ordination
axislabs <- axis.long(Ordination.model1, choices=c(1 , 2))
# change the theme
# possibly need for extrafont::loadfonts(device="win") to have Arial
# as alternative, use library(ggThemeAssist)
BioR.theme <- theme(
panel.background = element_blank(),
panel.border = element_blank(),
panel.grid = element_blank(),
axis.line = element_line("gray25"),
text = element_text(size = 12, family="Arial"),
axis.text = element_text(size = 10, colour = "gray25"),
axis.title = element_text(size = 14, colour = "gray25"),
legend.title = element_text(size = 14),
legend.text = element_text(size = 14),
legend.key = element_blank())
# no species scores
# centroids calculated directly via the centroids.long function
plotgg1 <- ggplot() +
geom_vline(xintercept = c(0), color = "grey70", linetype = 2) +
geom_hline(yintercept = c(0), color = "grey70", linetype = 2) +
xlab(axislabs[1, "label"]) +
ylab(axislabs[2, "label"]) +
scale_x_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
scale_y_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
geom_mark_hull(data=sites1, aes(x=axis1, y=axis2, colour = Management),
concavity = 0.1, alpha=0.8, size=0.2, show.legend=FALSE) +
geom_point(data=sites1, aes(x=axis1, y=axis2, colour=Management, shape=Management),
size=5) +
# geom_segment(data=species1, aes(x=0, y=0, xend=axis1*2, yend=axis2*2),
# size=1.2, arrow=arrow()) +
# geom_label_repel(data=species1, aes(x=axis1*2, y=axis2*2, label=labels)) +
geom_point(data=centroids.long(sites1, grouping=Management, centroids.only=TRUE),
aes(x=axis1c, y=axis2c, colour=Centroid, shape=Centroid), size=10, show.legend=FALSE) +
geom_segment(data=centroids.long(sites1, grouping=Management),
aes(x=axis1c, y=axis2c, xend=axis1, yend=axis2, colour=Management),
size=1, show.legend=FALSE) +
BioR.theme +
ggsci::scale_colour_npg() +
coord_fixed(ratio=1)
plotgg1
# select species to plot based on goodness of fit
spec.envfit <- envfit(plot1, env=dune)
spec.data1 <- data.frame(r=spec.envfit$vectors$r, p=spec.envfit$vectors$pvals)
species2 <- species.long(plot1, spec.data=spec.data1)
species2 <- species2[species2$r > 0.6, ]
# after_scale introduced in ggplot2 3.3.0
plotgg2 <- ggplot() +
geom_vline(xintercept = c(0), color = "grey70", linetype = 2) +
geom_hline(yintercept = c(0), color = "grey70", linetype = 2) +
xlab(axislabs[1, "label"]) +
ylab(axislabs[2, "label"]) +
scale_x_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
scale_y_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
geom_mark_ellipse(data=sites1, aes(x=axis1, y=axis2,
colour=Management, fill=after_scale(alpha(colour, 0.2))),
expand=0, size=0.2, show.legend=TRUE) +
geom_point(data=sites1, aes(x=axis1, y=axis2, colour=Management, shape=Management),
size=5) +
geom_segment(data=centroids.long(sites1, grouping=Management),
aes(x=axis1c, y=axis2c, xend=axis1, yend=axis2, colour=Management),
size=1, show.legend=FALSE) +
geom_segment(data=species2, aes(x=0, y=0, xend=axis1*2, yend=axis2*2),
size=1.2, arrow=arrow()) +
geom_label_repel(data=species2, aes(x=axis1*2, y=axis2*2, label=labels)) +
BioR.theme +
ggsci::scale_colour_npg() +
coord_fixed(ratio=1)
plotgg2
# Add contour and vector for a continuous explanatory variable
Ordination.model2 <- capscale(dune ~ Management, data=dune.env,
distance='kulczynski', sqrt.dist=F, add='cailliez')
plot2 <- ordiplot(Ordination.model2, choices=c(1,2), scaling='species')
sites2 <- sites.long(plot2, env.data=dune.env)
axislabs <- axis.long(Ordination.model2, choices=c(1 , 2))
dune.envfit <- envfit(plot2, dune.env)
vectors2 <- vectorfit.long(dune.envfit)
A1.surface <- ordisurf(plot2, y=A1)
A1.surface
A1.grid <- ordisurfgrid.long(A1.surface)
plotgg3 <- ggplot() +
geom_contour_filled(data=A1.grid, aes(x=x, y=y, z=z)) +
geom_vline(xintercept = c(0), color = "grey70", linetype = 2) +
geom_hline(yintercept = c(0), color = "grey70", linetype = 2) +
xlab(axislabs[1, "label"]) +
ylab(axislabs[2, "label"]) +
scale_x_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
scale_y_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
geom_point(data=sites2, aes(x=axis1, y=axis2, size=A1), shape=21, colour="black", fill="red") +
geom_segment(data=subset(vectors2, vector=A1), aes(x=0, y=0, xend=axis1*2, yend=axis2*2),
size=1.2, arrow=arrow()) +
geom_label_repel(data=subset(vectors2, vector=A1), aes(x=axis1*2, y=axis2*2,
label=vector), size=5) +
BioR.theme +
scale_fill_viridis_d() +
scale_size(range=c(1, 20)) +
labs(fill="A1") +
coord_fixed(ratio=1)
plotgg3
# after_stat introduced in ggplot2 3.3.0
plotgg4 <- ggplot() +
geom_contour(data=A1.grid, aes(x=x, y=y, z=z, colour=factor(after_stat(level))), size=2) +
geom_vline(xintercept = c(0), color = "grey70", linetype = 2) +
geom_hline(yintercept = c(0), color = "grey70", linetype = 2) +
xlab(axislabs[1, "label"]) +
ylab(axislabs[2, "label"]) +
scale_x_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
scale_y_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
geom_point(data=sites2, aes(x=axis1, y=axis2, size=A1), shape=21, colour="black", fill="red") +
geom_label_repel(data=sites2, aes(x=axis1, y=axis2, label=labels),
colour='black', size=4) +
BioR.theme +
scale_colour_viridis_d() +
scale_size(range=c(1, 20)) +
labs(colour="A1") +
coord_fixed(ratio=1)
plotgg4
# example of Voronoi segmentation
plotgg5 <- ggplot(data=sites2, aes(x=axis1, y=axis2)) +
geom_voronoi_tile(aes(fill = Management, group=-1L), max.radius=0.2) +
geom_voronoi_segment(colour="grey50") +
geom_vline(xintercept = c(0), color = "grey70", linetype = 2) +
geom_hline(yintercept = c(0), color = "grey70", linetype = 2) +
xlab(axislabs[1, "label"]) +
ylab(axislabs[2, "label"]) +
scale_x_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
scale_y_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
geom_point() +
BioR.theme +
ggsci::scale_colour_npg() +
coord_fixed(ratio=1)
plotgg5
# adding ellipse via ordiellipse
plot3 <- ordiplot(Ordination.model1, choices=c(1,2), scaling='species')
axislabs <- axis.long(Ordination.model1, choices=c(1 , 2))
Management.ellipses <- ordiellipse(plot3, groups=Management, display="sites", kind="sd")
Management.ellipses.long2 <- ordiellipse.long(Management.ellipses, grouping.name="Management")
plotgg6 <- ggplot() +
geom_vline(xintercept = c(0), color = "grey70", linetype = 2) +
geom_hline(yintercept = c(0), color = "grey70", linetype = 2) +
xlab(axislabs[1, "label"]) +
ylab(axislabs[2, "label"]) +
scale_x_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
scale_y_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
geom_polygon(data=Management.ellipses.long2,
aes(x=axis1, y=axis2, colour=Management,
fill=after_scale(alpha(colour, 0.2))),
size=0.2, show.legend=FALSE) +
geom_point(data=sites1, aes(x=axis1, y=axis2, colour=Management, shape=Management),
size=5) +
geom_segment(data=centroids.long(sites1, grouping=Management),
aes(x=axis1c, y=axis2c, xend=axis1, yend=axis2, colour=Management),
size=1, show.legend=FALSE) +
BioR.theme +
ggsci::scale_colour_npg() +
coord_fixed(ratio=1)
plotgg6
# adding cluster results via pvclust.long
library(pvclust)
# transformation as pvclust works with Euclidean distance
dune.Hellinger <- disttransform(dune, method='hellinger')
dune.pv <- pvclust(t(dune.Hellinger),
method.hclust="mcquitty",
method.dist="euclidean",
nboot=1000)
plot(dune.pv)
pvrect(dune.pv, alpha=0.89, pv="au")
# Model fitted earlier
plot1 <- ordiplot(Ordination.model1, choices=c(1,2), scaling='species')
cl.data1 <- ordicluster(plot1, cluster=as.hclust(dune.pv$hclust))
sites1 <- sites.long(plot1, env.data=dune.env)
axislabs <- axis.long(Ordination.model1, choices=c(1 , 2))
cl.data1 <- ordicluster(plot2, cluster=as.hclust(dune.pv$hclust))
pvlong <- pvclust.long(dune.pv, cl.data1)
# as in example for ordicluster, prune higher level hierarchies
plotgg7 <- ggplot() +
geom_vline(xintercept = c(0), color = "grey70", linetype = 2) +
geom_hline(yintercept = c(0), color = "grey70", linetype = 2) +
xlab(axislabs[1, "label"]) +
ylab(axislabs[2, "label"]) +
scale_x_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
scale_y_continuous(sec.axis = dup_axis(labels=NULL, name=NULL)) +
geom_segment(data=subset(pvlong$segments, pvlong$segments$prune > 3),
aes(x=x1, y=y1, xend=x2, yend=y2, colour=au>=0.89,
size=au),
show.legend=TRUE) +
geom_point(data=subset(pvlong$nodes, pvlong$nodes$prune > 3),
aes(x=x, y=y, fill=au>=0.89),
shape=21, size=2, colour="black") +
geom_point(data=sites1,
aes(x=axis1, y=axis2, shape=Management),
colour="darkolivegreen4", alpha=0.9, size=5) +
geom_text(data=sites1,
aes(x=axis1, y=axis2, label=labels)) +
BioR.theme +
ggsci::scale_colour_npg() +
scale_size(range=c(0.3, 2)) +
scale_shape_manual(values=c(15, 16, 17, 18)) +
guides(shape = guide_legend(override.aes = list(linetype = 0))) +
coord_fixed(ratio=1)
plotgg7
## End(Not run) # dontrun
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.