我正在尝试在ggplot2中制作一些纯素rda结果的自定义图。我基本上修改了Plotting RDA (vegan) in ggplot中的方向,因此我使用形状和颜色标签来传达有关采样点的一些信息。
我用素食主义者设置pca分析如下
library(vegan)
library(dplyr)
library(tibble)
library(ggplot2)
cbPalette <- c("#000000", "#E69F00", "#56B4E9", "#009E73", "#0072B2", "#D55E00", "#CC79A7", "#F0E442")
data(dune)
data(dune.env)
dune.pca <- rda(dune)
uscores <- data.frame(dune.pca$CA$u)
uscores1 <- inner_join(rownames_to_column(dune.env), rownames_to_column(data.frame(uscores)), type = "right", by = "rowname")
vscores <- data.frame(dune.pca$CA$v)
我可以做一个简单的双时隙
biplot(dune.pca)
现在,让我们说我想了解更多关于这些不同样本所处理的管理条件。我将对它们进行着色和形状编码并使用ggplot进行绘图。
p1 <- ggplot(uscores1, aes(x = PC1, y = PC2, col = Management,
shape = Management)) +
geom_point() +
scale_color_manual(values=cbPalette) +
scale_fill_manual(values=cbPalette) +
scale_shape_manual(values = c(21:25)) +
theme_bw() +
theme(strip.text.y = element_text(angle = 0))
p1
接下来,我真的想添加一些双向箭头,向我们展示与物种丰度相对应的轴。我可以使用ggplot来绘制如下箭头:
p2 <- ggplot() + geom_text(data = vscores, aes(x = PC1, y = PC2, label = rownames(vscores)), col = 'red') +
geom_segment(data = vscores, aes(x = 0, y = 0, xend = PC1, yend = PC2), arrow=arrow(length=unit(0.2,"cm")),
alpha = 0.75, color = 'darkred')
p2
我真的想做的是在同一个情节上得到那些箭头和点。目前这是我尝试使用的代码:
p3 <- p1 + geom_text(data = vscores, aes(x = PC1, y = PC2, label = rownames(vscores)), col = 'red') +
geom_segment(data = vscores, aes(x = 0, y = 0, xend = PC1, yend = PC2), arrow=arrow(length=unit(0.2,"cm")),
alpha = 0.75, color = 'darkred')
p3
令我烦恼的是,这只会产生一个空白图(空窗口,没有错误信息)。很明显,我错过了一些东西或缩放了一些不正确关于如何最好地叠加最后两个图的任何建议?
答案 0 :(得分:2)
检查github中的 ggvegan 包。它仍然是0.0版本,目前还没有积极开发,但如果你说
library(ggvegan)
autoplot(dune.pca) # your result object
您可以使用通常的 ggplot2 方式自定义此图表,并具有各种美学效果。
答案 1 :(得分:1)
你还应该看看GitHub上的ggordiplots(https://github.com/jfq3/ggordiplots)。它包括函数gg_env__fit,它将环境向量拟合到一个排序图。包中的所有函数都会静默地返回您可能用于修改绘图的数据框。该套餐包括修改情节的插图。您可以通过访问john-quensen.com并查看GitHub页面来阅读小插曲而无需安装软件包。
答案 2 :(得分:0)
尝试:
library(cowplot) #not needed I just had it attached while answering the question hence the theme.
library(ggplot2)
ggplot(uscores1) +
geom_point(aes(x = PC1, y = PC2, col = Management,
shape = Management)) +
scale_color_manual(values=cbPalette) +
scale_fill_manual(values=cbPalette) +
scale_shape_manual(values = c(21:25)) +
geom_text(data = vscores, aes(x = PC1, y = PC2, label = rownames(vscores)), col = 'red') +
geom_segment(data = vscores, aes(x = 0, y = 0, xend = PC1, yend = PC2), arrow=arrow(length=unit(0.2,"cm")),
alpha = 0.75, color = 'darkred')+
theme_bw() +
theme(strip.text.y = element_text(angle = 0))
p1
图正在将col
和shape
变量Management
传递给geom_text/geom_segment
,因为它们没有在那里定义,但没有Management
data = vscores
中的列。至少我认为是基于错误:
`Error in eval(expr, envir, enclos) : object 'Management' not found`