diff --git a/01_Mesobromion.R b/01_Mesobromion.R
index 9f85ba9a0e38084e5c734a152d41650f946e2952..816b33edbcf1604dfb1732938142b3d27c589d05 100644
--- a/01_Mesobromion.R
+++ b/01_Mesobromion.R
@@ -145,9 +145,9 @@ releve08trait.samp <- sample(releve08trait, round(length(releve08trait)/10), rep
 species <- species %>% 
   rownames_to_column("RELEVE_NR") %>% 
   filter(RELEVE_NR %in% releve08trait.samp) %>% 
-  column_to_rownames("RELEVE_NR") %>% 
-  as.tbl() %>% 
-  dplyr::select(one_of(traits$species0))
+  #column_to_rownames("RELEVE_NR") %>% 
+  #as.tbl() %>% 
+  dplyr::select(RELEVE_NR, one_of(traits$species0))
 
 
 env <- env %>% 
@@ -233,6 +233,8 @@ dim(traits) #783 53
 dim(env) #558 8
 
 
+
+
 ######4.  Extract Environmental Factors ######
 ### CHELSA
 library(raster)
@@ -281,14 +283,18 @@ write_delim(traits, path="_data/Mesobromion/traits.out.10perc.txt", delim="\t")
 write_delim(env, path="_data/Mesobromion/env.10perc.txt", delim="\t")
 
 ## version without missing species
-  empty <- which(colSums(species)==0)
+  empty <- which(colSums(species[,-1])==0)
   traits_nozero <- traits[-empty,]
-  species_nozero <- species[,-empty]
+  species_nozero <- species[,-(empty+1)]
 
 write_delim(species_nozero , path="_data/Mesobromion/species.out.10perc_nozero.txt", delim="\t")
 write_delim(traits_nozero, path="_data/Mesobromion/traits.out.10perc_nozero.txt", delim="\t")
 
 
+write_delim(species %>% 
+              dplyr::select(RELEVE_NR), 
+            path="_derived/Mesobromion/ReleveList.txt", delim="\t")
+
 
 
 
@@ -300,6 +306,7 @@ write_delim(traits_nozero, path="_data/Mesobromion/traits.out.10perc_nozero.txt"
 ####1.  Reimport data ################################ 
 ## calculate corr between species composition matrix and traits
 species <- read_delim("_data/Mesobromion/species.out.10perc.txt", delim="\t")
+species_nozero <- read_delim("_data/Mesobromion/species.out.10perc_nozero.txt", delim="\t")
 traits <- read_delim("_data/Mesobromion/traits.out.10perc.txt", delim="\t")
 trait.labs <- read_delim("_data/Mesobromion/TraitLabels_Long.csv", delim=",") %>% 
   rownames_to_column("Trait.comb")
@@ -598,9 +605,10 @@ break()
   
 
 CWM.wide <- species %>% 
-  rownames_to_column("RELEVE_NR") %>% 
-  reshape2::melt(.id="RELEVE_NR") %>% 
-  rename(species0=variable, pres=value) %>% 
+  #rownames_to_column("RELEVE_NR") %>% 
+  #  reshape2::melt(.id="RELEVE_NR") %>% 
+  pivot_longer(-RELEVE_NR, names_to = "species0", values_to = "pres") %>% 
+  #rename(species0=variable, pres=value) %>% 
   as.tbl() %>% 
   filter(pres>0) %>% 
   arrange(RELEVE_NR)  %>% 
@@ -616,9 +624,20 @@ CWM.wide <- species %>%
   column_to_rownames("RELEVE_NR")
 
 #### 4. PCA Graphs ####
-#### 4.1 PCA of Y (Bealls) matrix + CWM ####
 library(vegan)
-W.beals <- as.data.frame(beals(species, include=T, type=2))
+library(ggrepel)
+##from https://stackoverflow.com/questions/6862742/draw-a-circle-with-ggplot2
+circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){
+  r = diameter / 2
+  tt <- seq(0,2*pi,length.out = npoints)
+  xx <- center[1] + r * cos(tt)
+  yy <- center[2] + r * sin(tt)
+  return(data.frame(x = xx, y = yy))
+}
+
+#### 4.1 PCA of Y (Bealls) matrix + CWM ####
+W.beals <- as.data.frame(beals(species_nozero %>% 
+                                 column_to_rownames("RELEVE_NR"), include=T, type=2))
 write.table(W.beals, sep="\t", file="_derived/Mesobromion/MatrixY_Beals.csv")
 pca.out <- rda(W.beals)
 varexpl <- round((pca.out$CA$eig)/sum(pca.out$CA$eig)*100,1)
@@ -626,54 +645,80 @@ cwms.envfit <- envfit(pca.out, CWM.wide, na.rm = T, choices = 1:5)
 env.envfit <- envfit(pca.out, env %>% 
                        dplyr::select(Temp, Prec, pH=PHIPHOX, C.org=ORCDRC), choices=1:5)
 
+### Transform to correlations and sink envfits
+### see https://www.davidzeleny.net/anadat-r/doku.php/en:suppl_vars_examples for procedure
+scores.pca <- pca.out$CA$u
+arrow_heads <- cwms.envfit$vectors$arrows  # extracts matrix of coordinates of arrow heads from ef
+r2 <- cwms.envfit$vectors$r                # extracts vector of r2 for each env. variable
+cwms.cor <- arrow_heads * sqrt (r2)
+cor(CWM.wide, scores.pca[,1:5])  #double check
+
+
+arrow_heads <- env.envfit$vectors$arrows  # extracts matrix of coordinates of arrow heads from ef
+r2 <- env.envfit$vectors$r                # extracts vector of r2 for each env. variable
+env.cor <- arrow_heads * sqrt (r2)
+cor(env %>% 
+      dplyr::select(Temp, Prec, pH=PHIPHOX, C.org=ORCDRC), scores.pca[,1:5]) #double check
+
+
+sink("_derived/Mesobromion/EnvFit_CWMs_env.txt")
+cwms.envfit$vectors
+env.envfit$vectors
+sink()
+
+
+dat <- circleFun(diameter = 2, npoints = 100) 
+
+myvectors <- as.data.frame(env.cor) %>% 
+  rownames_to_column("mylab") %>% 
+  mutate(category="Env") %>% 
+  bind_rows(as.data.frame(cwms.cor) %>% 
+              rownames_to_column("mylab") %>%
+              mutate(category="Trait")) %>% 
+  mutate(fontface0=ifelse(mylab %in% best.5traits, "bold", "plain")) %>% 
+  mutate(category=as.factor(category)) %>% 
+  mutate(mycol=ifelse(category=="Trait", "Dark blue", "Dark red"))
+  
+
 PCA1_2 <- ggplot() + 
-  geom_point(data=as.data.frame(pca.out$CA$u[,1:2]), 
+  geom_point(data=as.data.frame(pca.out$CA$u[,1:2]*5), 
              aes(x=PC1, y=PC2), pch="+", size=2, alpha=0.8) + 
-  geom_segment(data=as.data.frame(cwms.envfit$vectors$arrows*.2), 
-               aes(x=0, xend=PC1, y=0, yend=PC2), col="Dark blue", arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) +
-  geom_segment(data=as.data.frame(env.envfit$vectors$arrows*.2), 
-               aes(x=0, xend=PC1, y=0, yend=PC2), col="Dark red", arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) +
-  geom_label(data=as.data.frame(env.envfit$vectors$arrows*.23) %>% 
-              rownames_to_column("Env"), 
-            aes(x=PC1, y=PC2, label=Env), col="Dark red", size=2, 
-            position = position_dodge(1) ) +
-  geom_label(data=as.data.frame(cwms.envfit$vectors$arrows*.23) %>%
-               rownames_to_column("Trait") %>% 
-               mutate(fontface0=ifelse(Trait %in% best.5traits, "bold", "plain")), 
-             aes(x=PC1, y=PC2, label=Trait, fontface=fontface0), col="Dark blue", size=2, 
-             position = position_dodge(1) ) +
+  geom_segment(data=myvectors, 
+               aes(x=0, xend=PC1, y=0, yend=PC2, col=mycol), 
+               arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) +
+  geom_path(data=dat,aes(x,y), col=gray(0.8), lwd=0.5) + #add correlation circle
+  geom_label(data=myvectors %>% 
+               mutate_if(~is.numeric(.), ~(.)*1.2),
+             aes(x=PC1, y=PC2, label=mylab, col=mycol, fontface=fontface0), size=2, 
+             position = position_dodge(1)) +#, segment.alpha=0.5, segment.colour=gray(0.8)) +
   xlab(paste("PC1 (", varexpl[1], "%)", sep="")) + 
   ylab(paste("PC2 (", varexpl[2], "%)", sep="")) + 
   theme_bw() + 
-  scale_y_continuous(limits=c(-0.25, 0.25)) + 
-  scale_x_continuous(limits=c(-0.25, 0.25)) +  coord_equal() + 
+  scale_color_identity() + 
+  scale_y_continuous(limits=c(-1, 1)) + 
+  scale_x_continuous(limits=c(-1, 1)) +  coord_equal() + 
   theme(panel.grid = element_blank())
 
-(PCA3_4 <- ggplot() + 
-  geom_point(data=as.data.frame(pca.out$CA$u[,1:4]), 
+
+PCA3_4 <- ggplot() + 
+  geom_point(data=as.data.frame(pca.out$CA$u[,3:4]*5), 
              aes(x=PC3, y=PC4), pch="+", size=2, alpha=0.8) + 
-  geom_segment(data=as.data.frame(cwms.envfit$vectors$arrows*.2), 
-               aes(x=0, xend=PC3, y=0, yend=PC4), col="Dark blue", arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) +
-  geom_segment(data=as.data.frame(env.envfit$vectors$arrows*.2), 
-               aes(x=0, xend=PC3, y=0, yend=PC4), col="Dark red", arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) +
-  geom_label(data=as.data.frame(env.envfit$vectors$arrows*.23) %>% 
-               rownames_to_column("Env"), 
-             aes(x=PC3, y=PC4, label=Env), col="Dark red", size=2, 
-             position = position_dodge(1)) + 
-  geom_label(data=as.data.frame(cwms.envfit$vectors$arrows*.23) %>%
-               rownames_to_column("Trait") %>% 
-               mutate(fontface0=ifelse(Trait %in% best.5traits, 2, 1)), 
-             aes(x=PC3, y=PC4, label=Trait, fontface=fontface0 ),  col="Dark blue", size=2, 
-             position = position_dodge(1) 
-             ) +
+  geom_segment(data=myvectors, 
+               aes(x=0, xend=PC3, y=0, yend=PC4, col=mycol), 
+               arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) +
+  geom_path(data=dat,aes(x,y), col=gray(0.8), lwd=0.5) + #add correlation circle
+  geom_label_repel(data=myvectors, 
+             aes(x=PC3, y=PC4, label=mylab, col=mycol, fontface=fontface0), size=2, 
+             position = position_dodge(1), segment.alpha=0.8, segment.colour=gray(0.7), segment.size = 0.5) +
   xlab(paste("PC3 (", varexpl[3], "%)", sep="")) + 
   ylab(paste("PC4 (", varexpl[4], "%)", sep="")) + 
   theme_bw() + 
-  scale_y_continuous(limits=c(-0.25, 0.25)) + 
-  scale_x_continuous(limits=c(-0.25, 0.25)) + 
+  scale_color_identity() + 
+  scale_y_continuous(limits=c(-1, 1)) + 
+  scale_x_continuous(limits=c(-1, 1)) + 
   coord_equal() + 
   theme(panel.grid = element_blank())
-)
+
 PC_beals <- cowplot::plot_grid(PCA1_2,PCA3_4, nrow=1)
 
 ggsave("_pics/Fig6_PC_Beals_1-4.png", width=10, height=5, dpi=300, last_plot())
@@ -681,23 +726,6 @@ ggsave("_pics/Fig6_PC_Beals_1-4.png", width=10, height=5, dpi=300, last_plot())
 
 
 
-### Transform to correlations and sink envfits
-### see https://www.davidzeleny.net/anadat-r/doku.php/en:suppl_vars_examples for procedure
-arrow_heads <- cwms.envfit$vectors$arrows  # extracts matrix of coordinates of arrow heads from ef
-r2 <- cwms.envfit$vectors$r                # extracts vector of r2 for each env. variable
-cwms.cor <- arrow_heads * sqrt (r2)
-
-arrow_heads <- env.envfit$vectors$arrows  # extracts matrix of coordinates of arrow heads from ef
-r2 <- env.envfit$vectors$r                # extracts vector of r2 for each env. variable
-env.cor <- arrow_heads * sqrt (r2)
-
-
-sink("_derived/Mesobromion/EnvFit_toCor_CWMs_env.txt")
-rbind(cwms.cor, env.cor)
-sink()
-
-
-
 
 
 #### 4.2 PCA of CWMs #####
@@ -727,7 +755,11 @@ ggplot() +
 #myweights <- c(rep(1/9, 9), rep(1/17, 17), rep(1, 26))
 #traits.gowdis <- FD::gowdis(traits, w=myweights, ord="podani")
 data2 <- traits %>% 
-  dplyr::select(any_of(traits.sign.alone))
+  dplyr::select(any_of(traits.sign.alone)) %>% 
+  rownames_to_column("species") %>% 
+  filter(species %in% colnames(species_nozero)) %>% 
+  column_to_rownames("species")
+  
 corr1 <- cor(data2, use="pairwise.complete.obs")
 pca2 <- princomp(covmat=corr1)
 #plot(pca2$loadings[,2]~pca2$loadings[,1])
@@ -740,50 +772,96 @@ pca.scores<- zdat %*% e1$vectors #scaled values x vectors
 pca.scores <- pca.scores[,1:5]
 colnames(pca.scores)<-c('pca1','pca2','pca3','pca4','pca5') #just quickly naming the columns
 
-PCA.t1 <- ggplot() + 
-  geom_point(data=as.data.frame(pca.scores[,1:2]), 
-             aes(x=pca1, y=pca2), pch="+", size=2, alpha=0.8) + 
-  geom_segment(data=as.data.frame(pca2$loadings[,1:5]*8), 
+dat <- circleFun(diameter = 2, npoints = 100) 
+
+baseplot <- ggplot(data=as.data.frame(pca.scores*.2)) + 
+  scale_color_identity() + 
+  coord_equal(xlim = c(-1, 1), ylim=c(-1, 1)) +
+  xlab(paste("PC1 (", varexpl[1], "%)", sep="")) + 
+  ylab(paste("PC2 (", varexpl[2], "%)", sep="")) + 
+  theme_bw() + 
+  theme(panel.grid = element_blank())
+
+PCA.t1 <- baseplot +
+  geom_point(aes(x=pca1, y=pca2), pch="+", size=2, alpha=0.8) + 
+  geom_segment(data=as.data.frame(pca2$loadings[,1:5]), 
                aes(x=0, xend=Comp.1, y=0, yend=Comp.2, col="Dark green"), 
                arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) +
-  geom_label(data=as.data.frame(jitter(pca2$loadings[,1:5]*8, factor = 300)) %>%
-  #geom_label(data=as.data.frame(pca2$loadings[,1:5]*8) %>% 
+  geom_path(data=dat,aes(x,y), col=gray(0.8), lwd=0.5) + #add correlation circle
+  geom_label_repel(data=as.data.frame(pca2$loadings[,1:5]) %>% 
                rownames_to_column("Trait") %>% 
                mutate(fontface0=ifelse(Trait %in% best.5traits, "bold", "plain")), 
              aes(x=Comp.1, y=Comp.2, label=Trait, col="Dark green", fontface=fontface0),  size=2, 
-             position = position_dodge(2)) +
-  scale_color_identity() + 
-  coord_equal(xlim = c(-5, 5), ylim=c(-5, 5)) +
-  xlab(paste("PC1 (", varexpl[1], "%)", sep="")) + 
-  ylab(paste("PC2 (", varexpl[2], "%)", sep="")) + 
-  theme_bw() + 
-  theme(panel.grid = element_blank())# + 
+             position = position_dodge(2),segment.alpha=0.5, segment.colour=gray(0.8))
 #ggtitle("PCoA of species-level traits") 
 
-PCA.t2 <- ggplot() + 
-  geom_point(data=as.data.frame(pca.scores[,1:4]), 
-             aes(x=pca3, y=pca4), pch="+", size=2, alpha=0.8) + 
-  geom_segment(data=as.data.frame(pca2$loadings[,1:5]*6), 
+PCA.t2 <- baseplot +
+  geom_point(aes(x=pca3, y=pca4), pch="+", size=2, alpha=0.8) + 
+  geom_segment(data=as.data.frame(pca2$loadings[,1:5]), 
                aes(x=0, xend=Comp.3, y=0, yend=Comp.4, col="Dark green"), 
                arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) +
-  geom_label(data=as.data.frame(jitter(pca2$loadings[,1:5]*6, factor = 300)) %>%
+  geom_path(data=dat,aes(x,y), col=gray(0.8), lwd=0.5) + #add correlation circle
+  geom_label_repel(data=as.data.frame(pca2$loadings[,1:5]) %>%
                #geom_label(data=as.data.frame(pca2$loadings[,1:5]*8) %>% 
                rownames_to_column("Trait") %>% 
                mutate(fontface0=ifelse(Trait %in% best.5traits, "bold", "plain")), 
              aes(x=Comp.3, y=Comp.4, label=Trait, col="Dark green", fontface=fontface0),  size=2, 
-             position = position_dodge(2)) +
-  scale_color_identity() + 
-  coord_equal(xlim = c(-5, 5), ylim=c(-5, 5)) +
-  xlab(paste("PC3 (", varexpl[3], "%)", sep="")) + 
-  ylab(paste("PC4 (", varexpl[4], "%)", sep="")) + 
-  theme_bw() + 
-  theme(panel.grid = element_blank())
+             position = position_dodge(2),segment.alpha=0.5, segment.colour=gray(0.8)) 
 
 PC_traits <- cowplot::plot_grid(PCA.t1, PCA.t2, nrow=1)
 
 ggsave("_pics/FigS6_PCA_Traits_1-4_only11.png", width=10, height=5, dpi=300, PC_traits)
 
 
+## alternative version of figS6, showing the species
+tmp <- as.data.frame(pca.scores[,1:4]*.2) %>% 
+  mutate(species0=rownames(pca.scores)) %>% 
+  mutate(species=species0) %>% 
+  separate(species0, sep="_", into=c("Gen", "Spe")) %>% 
+  mutate(Gen=substr(Gen, 1, 3)) %>% 
+  mutate(Spe=substr(Spe, 1, 3)) %>% 
+  mutate(labels=paste(Gen, Spe, sep="_"))
+
+
+PCA.t1.sp <- baseplot %+% tmp + 
+  geom_text(aes(x=pca1, y=pca2, label=labels), size=2, alpha=0.7) + 
+  geom_segment(data=as.data.frame(pca2$loadings[,1:5]), 
+               aes(x=0, xend=Comp.1, y=0, yend=Comp.2, col="Dark green"), 
+               arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) +
+  geom_path(data=dat,aes(x,y), col=gray(0.8), lwd=0.5) + #add correlation circle
+  geom_label_repel(data=as.data.frame(pca2$loadings[,1:5]) %>% 
+                     rownames_to_column("Trait") %>% 
+                     mutate(fontface0=ifelse(Trait %in% best.5traits, "bold", "plain")), 
+                   aes(x=Comp.1, y=Comp.2, label=Trait, col="Dark green", fontface=fontface0),  size=2, 
+                   position = position_dodge(2),segment.alpha=0.5, segment.colour=gray(0.8))
+
+PCA.t2.sp <- baseplot %+% tmp + 
+  geom_text(aes(x=pca3, y=pca4, label=labels), size=2, alpha=0.7) + 
+  geom_segment(data=as.data.frame(pca2$loadings[,1:5]), 
+               aes(x=0, xend=Comp.3, y=0, yend=Comp.4, col="Dark green"), 
+               arrow = arrow(length = unit(0.08, "inches")), alpha=0.8) +
+  geom_path(data=dat,aes(x,y), col=gray(0.8), lwd=0.5) + #add correlation circle
+  geom_label_repel(data=as.data.frame(pca2$loadings[,1:5]) %>%
+                     #geom_label(data=as.data.frame(pca2$loadings[,1:5]*8) %>% 
+                     rownames_to_column("Trait") %>% 
+                     mutate(fontface0=ifelse(Trait %in% best.5traits, "bold", "plain")), 
+                   aes(x=Comp.3, y=Comp.4, label=Trait, col="Dark green", fontface=fontface0),  size=2, 
+                   position = position_dodge(2),segment.alpha=0.5, segment.colour=gray(0.8)) 
+#PC_traits_sp <- cowplot::plot_grid(PCA.t1.sp, PCA.t2.sp, nrow=1)
+
+ggsave("_pics/FigS6_PCA_Traits_1-2_wSpecies.png", width=8, height=8, dpi=300, PCA.t1.sp)
+ggsave("_pics/FigS6_PCA_Traits_3-4_wSpecies.png", width=8, height=8, dpi=300, PCA.t2.sp)
+
+## Create list of species labels
+write_delim(tmp %>% 
+              dplyr::select(species, label=labels), 
+            path = "_derived/Mesobromion/SpeciesList.txt")
+
+
+
+
+
+
 #### 4.4 PCoA of X (Fuzzy weighted) matrix ####
 library(vegan)
 fuzzy <- read.table("_data/Mesobromion/X_Dry-Grassland_581plots_488spp_R.txt", header=T)#, delim="\t")