首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R用ggplot错误箭头长度显示cca图

R用ggplot错误箭头长度显示cca图
EN

Stack Overflow用户
提问于 2015-05-30 17:55:37
回答 1查看 2.6K关注 0票数 0

我正在尝试自定义一个共同国家评估计划执行的织女星R包。我使用了海底覆盖矩阵(%)和鱼类丰度矩阵(个体数)来进行这一分析。我在两年内收集了4个珊瑚礁的数据。我想有不同颜色的地点点(用于珊瑚礁遗址)和形状(年份),鱼类种类作为文字和海底动物作为箭头。我几乎是手动完成它的ggplot,但是箭头的长度似乎是错误的。比较我的情节和“自动绘图”和"plot.cca“生成的情节,我的箭头看起来太短了。我的问题是如何解决这个问题?

请从以下链接复制“海底动物”和“鱼类”数据:http://pedromeirelles.com.br/blog)。图(ggvegan,cca.plot和ggplot)也可以在这个链接中找到。我还不能在这里发布图片,而且数据太大了。很抱歉给您带来不便。

先谢谢你。

下面是我用来画情节的剧本。

ggplot手动绘制

代码语言:javascript
复制
library("ggplot2")
library("vegan")
library("grid")
library("ggvegan")

benthos <- please copy this dataframe from the link above
fish <- please copy this dataframe from the link above
attach(fish)
fish.num<-fish[,3:ncol(fish)]
benthos.num <-benthos[,3:ncol(benthos)] 

mod <- cca(fish.num, benthos.num)

cca.res<-summary(mod)
cca.sites <-data.frame(cca.res$sites)
ord_df<-data.frame(Site=Site,Year=Year,CCA1=cca.sites$CCA1,CCA2=cca.sites$CCA2)
ord_df$Year <- factor(ord_df$Year)
ord_df$Site <- factor(ord_df$Site)
exp<-cca.res$concont
exp<-data.frame(exp$importance)
cca.species<-data.frame(cca.res$species)
cca.species<-data.frame(Cca1=cca.species$CCA1,Cca2=cca.species$CCA2,species=rownames(cca.species))
cca.benthos<-data.frame(cca.res$biplot)
cca.benthos<-data.frame(cca1=cca.benthos$CCA1,cca2=cca.benthos$CCA2, Species = rownames(cca.benthos))

ggplot(ord_df) +
  geom_point(mapping = aes(x=CCA1, y=CCA2, color=Site, shape=Year),size = 4)+
  geom_text(data = cca.species, 
        aes(x = Cca1, y = Cca2, label = species),
        size = 3,alpha=0.4,colour = "darkred") +
  geom_segment(data = cca.benthos,
           aes(x = 0, xend = cca1, y = 0, yend = cca2),
           arrow = arrow(length = unit(0.5, "cm")), size=1, colour = "grey") +
  geom_text(data = cca.benthos, 
        aes(x = cca1*1.5, y = cca2*1.5, label = Species),
        size = 5) +
  labs(list(title = NULL, x = paste("CCA1 (",round(exp[2,1]*100,digits=2),"%)"), y = paste("CCA2 (",round(exp[2,2]*100,digits=2),"%)"))) +
  geom_hline(yintercept = 0, colour = "gray70") +
  geom_vline(xintercept = 0, colour = "gray70") +
  scale_colour_manual(values=c("#43CD80","#9400D3","steelblue3","#DEB887"))+
  theme_bw()+
  theme(panel.border = element_rect(colour = "white", size=1))+
  theme(legend.key=element_rect(fill='white'))+
  theme(legend.key = element_rect(colour = "white"))+

  theme(axis.title.x = element_text(face="bold", size=14))+
  theme(axis.title.y = element_text(face="bold", size=14))+
  theme(axis.text.x = element_text(size=14,color="black"))+
  theme(axis.text.y = element_text(size=14,color="black"))+
  theme(axis.line.x=element_blank())+
  theme(axis.line.y=element_blank())+
  theme(
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank())

ggvegen自编

代码语言:javascript
复制
autoplot(mod)

plot.cca

代码语言:javascript
复制
plot(mod, type="n")
text(mod, dis="bp")
points(mod, display="sites",pch=21, col="red", bg="yellow", cex=1.2)
text(mod, "species", col="blue", cex=0.8)
text(mod, display = "sites", cex=0.7, col="red")

我找不到数据图输入的不同之处

代码语言:javascript
复制
fdat <- fortify(mod)
fdat
cca.benthos
vegan::scores(mod, display = "bp")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-31 17:46:58

您错过了plot.cca()autoplot.cca()缩放箭头以适应绘图窗口的步骤。这是在plot.cca()中完成的,并且在ggvegan 0.0-3之前,通过实用程序函数ordiArrowMul()在中完成了。

纯素的2.3-0版本开始,此函数将从纯素导出。但是它使用基本图形的信息来进行缩放。因此,在ggvegan的0.0-3版本中,有一个ggvegan:::arrowMul(),它将执行与ordiArrowMul()相同的工作,但是根据数据,而不是当前的地块限制。(在此函数的未来版本中,我计划允许您在基本绘图中更改xlimylim时设置绘图的限制。)

你应该能做到

代码语言:javascript
复制
mul <- ggvegan:::arrowMul(cca.res$biplot,
                          rbind(cca.sites, cca.species))
cca.benthos <- data.frame(cca.res$biplot * mul)

(没有经过测试,我马上就要出门了--如果不起作用的话,我会发表评论的,稍后我会更详细地看一看。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30549459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档