Data input and organization

library(readxl)

PCoA_0512_data <- read_excel("D:/(R) plots collection/R markdown/PCoA/PCoA_0512_data.xlsx")
data = data.frame(PCoA_0512_data)
rownames(data) = data[,1]
data = data[,-1]
data = t(data)
# 看data长这样:
knitr::include_graphics("temp.png")

PCoA

library(vegan)
## Loading required package: permute
## Loading required package: lattice
## This is vegan 2.5-7
library(ape)
#Bray-curtis距离, cailliez校正
bray_dist<-vegdist(data,method = "bray")
df.pcoa<-pcoa(bray_dist,correction = "cailliez")
#获取用于画图的数据:df.pcoa$vectors
df.pcoa$vectors
##            Axis.1       Axis.2       Axis.3       Axis.4       Axis.5
## MJ1  -0.468536986  0.254232456  0.163063529  0.113124480 -0.046735729
## MJ3  -0.412837254  0.209158470 -0.080265790 -0.201727392  0.273803473
## MJ7  -0.368316566  0.227760238  0.306012188  0.160730011 -0.143716890
## MJ2  -0.278161938 -0.116786189  0.001253774  0.035095275  0.095260931
## MJ4  -0.190678292 -0.034562408 -0.438212428  0.030592969 -0.231058789
## MJ5  -0.220250335 -0.086547474 -0.353659407 -0.050563161  0.017468519
## MJ14  0.032116417 -0.474817988  0.153381377 -0.028722486  0.015929577
## MJ15 -0.005839456 -0.396258090  0.216315602 -0.089883675  0.005778204
## MJ17  0.028827218 -0.407750135  0.040404508 -0.007491264 -0.035657471
## MJ19  0.348789590  0.037480413 -0.089637446  0.166955633  0.042807000
## MJ20  0.287351145  0.017315178  0.002231703 -0.042294698 -0.007040406
## MJ23  0.313945322  0.002292314 -0.045139473  0.197103786  0.056686863
## MJ27  0.304591746  0.180479194  0.037565111 -0.205487189 -0.087929570
## MJ29  0.285166963  0.341082655  0.109250561 -0.259934653 -0.099785323
## MJ30  0.343832425  0.246921365 -0.022563810  0.182502365  0.144189612
##            Axis.6      Axis.7       Axis.8       Axis.9       Axis.10
## MJ1  -0.018726542 -0.05175946 -0.047040783  0.013675167  0.0639330095
## MJ3   0.041046975  0.09586258  0.010686725 -0.022888520 -0.0458229881
## MJ7  -0.005297990  0.02584892  0.004675678  0.027026570 -0.0600571378
## MJ2  -0.136643001 -0.07132687  0.073430768 -0.111888242  0.0535648028
## MJ4   0.133872058  0.05454079  0.075320075 -0.048617361 -0.0101863347
## MJ5  -0.077660220 -0.07623058 -0.082930462  0.137693613  0.0138302050
## MJ14  0.118193161  0.02277841  0.030553498  0.021202632  0.0813456294
## MJ15  0.064772629  0.04062246  0.040521479  0.070543958 -0.0271594807
## MJ17 -0.007593444 -0.03042825 -0.132549851 -0.089523551 -0.0796778939
## MJ19 -0.086362013  0.05395017 -0.060833019 -0.040843897  0.0096435916
## MJ20 -0.135517435 -0.18516598  0.110141597  0.026558811 -0.0585831617
## MJ23 -0.136080491  0.18720834  0.036786829  0.045538245  0.0021855925
## MJ27 -0.032437087 -0.01031281 -0.054484054 -0.029935802  0.0597315780
## MJ29  0.010821419  0.05337726  0.003781183 -0.001573728  0.0003093007
## MJ30  0.267611980 -0.10896495 -0.008059663  0.003032107 -0.0030567128
##          Axis.11       Axis.12
## MJ1  -0.01576180 -0.0116042069
## MJ3  -0.04139736 -0.0019106363
## MJ7  -0.01048523  0.0080247336
## MJ2   0.06671996  0.0084256838
## MJ4  -0.00897824  0.0013671508
## MJ5   0.02500805  0.0020758220
## MJ14 -0.05863058 -0.0165575255
## MJ15  0.03669569  0.0277199230
## MJ17  0.01767772 -0.0163933390
## MJ19 -0.06585079  0.0249489036
## MJ20 -0.05041900 -0.0089516087
## MJ23  0.03626110 -0.0184358494
## MJ27 -0.01094794  0.0124359239
## MJ29  0.04315511 -0.0112497725
## MJ30  0.03695329  0.0001047978
df.plot<-data.frame(df.pcoa$vectors)
#获得相关信息(如坐标轴上的百分比为Rel_corr_eig):df.pcoa$values
df.pcoa$values
##     Eigenvalues   Corr_eig Rel_corr_eig Broken_stick Cum_corr_eig Cum_br_stick
## 1   1.284861244 1.59914688  0.309550391   0.24462567    0.3095504    0.2446257
## 2   0.942903070 1.20127513  0.232533480   0.16770260    0.5420839    0.4123283
## 3   0.539666635 0.70983133  0.137403618   0.12924106    0.6794875    0.5415693
## 4   0.304620691 0.43430324  0.084069036   0.10360003    0.7635565    0.6451694
## 5   0.205708438 0.30630121  0.059291401   0.08436926    0.8228479    0.7295386
## 6   0.180037243 0.27614844  0.053454663   0.06898465    0.8763026    0.7985233
## 7   0.116577951 0.19279854  0.037320438   0.05616414    0.9136230    0.8546874
## 8   0.060669392 0.11893557  0.023022621   0.04517512    0.9366456    0.8998625
## 9   0.054079104 0.11205136  0.021690030   0.03555974    0.9583357    0.9354223
## 10  0.033768638 0.08732714  0.016904108   0.02701273    0.9752398    0.9624350
## 11  0.023867338 0.06989057  0.013528871   0.01932042    0.9887687    0.9817554
## 12  0.002914842 0.03801483  0.007358615   0.01232742    0.9961273    0.9940828
## 13  0.000000000 0.02000663  0.003872728   0.00591716    1.0000000    1.0000000
## 14 -0.009020685 0.00000000  0.000000000   0.00000000    1.0000000    1.0000000
## 15 -0.029475407 0.00000000  0.000000000   0.00000000    1.0000000    1.0000000
x_label<-round(df.pcoa$values$Rel_corr_eig[1]*100,2)
y_label<-round(df.pcoa$values$Rel_corr_eig[2]*100,2)
x_label
## [1] 30.96
y_label
## [1] 23.25
#添加分组信息
class = data.frame(class = c(rep('Seawater', 3),rep('7 days', 3),rep('14 days', 3),rep('21 days', 3),rep('1 month', 3) ))
data = cbind(df.plot, class)

Plot!

library(ggplot2)
#先调整一下图例顺序
data$class = factor(data$class, levels = c('Seawater', '7 days', '14 days', '21 days', '1 month'))
ggplot(data,aes(x=Axis.1,y=Axis.2, color = class, shape = class))+ geom_point(alpha=1, size=7) + theme_bw() + theme(panel.grid = element_blank()) + labs(x=paste0("PCoA1 (",x_label,"%)"), y=paste0("PCoA2 (",y_label,"%)")) + geom_vline(xintercept = 0, color = 'gray', size = 0.4) + geom_hline(yintercept = 0, color = 'gray', size = 0.4) + theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent', size = 1.2),legend.title=element_blank()) + theme(axis.text = element_text(colour = 'black', size = 20), axis.ticks = element_line(colour = 'black', size = 0.6), axis.title = element_text(size = 22), legend.key.size = unit(0.9, 'cm'), legend.text = element_text(size=18), axis.ticks.x = element_line(size=0.8), axis.ticks.y = element_line(size=0.8), axis.ticks.length = unit(0.18, 'cm') ) + scale_shape_manual(values = c(7,8,9,13,14)) + scale_colour_manual(values=c("coral4", "darkblue", "firebrick1", "darkorchid1","green4"))

Change the color and shape!

library(ggplot2)
#注意这里是fill而不是color
ggplot(data,aes(x=Axis.1,y=Axis.2, fill = class, shape = class))+ geom_point(alpha=0.8, size=7) + theme_bw() + theme(panel.grid = element_blank()) + labs(x=paste0("PCoA1 (",x_label,"%)"), y=paste0("PCoA2 (",y_label,"%)")) + geom_vline(xintercept = 0, color = 'gray', size = 0.4) + geom_hline(yintercept = 0, color = 'gray', size = 0.4) + theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent', size = 1.2),legend.title=element_blank()) + theme(axis.text = element_text(colour = 'black', size = 20), axis.ticks = element_line(colour = 'black', size = 0.6), axis.title = element_text(size = 22), legend.key.size = unit(0.9, 'cm'), legend.text = element_text(size=18), axis.ticks.x = element_line(size=0.8), axis.ticks.y = element_line(size=0.8), axis.ticks.length = unit(0.18, 'cm') ) + scale_shape_manual(values = c(21,22,23,24,25)) +  scale_fill_manual(values=c("lightgoldenrod1", "cornflowerblue", "indianred1", "mediumturquoise","darkolivegreen3"))

Add labels!

data_labels = data.frame(rownames(data)) 
colnames(data_labels) = 'datalabels'
data = cbind(data, data_labels)
ggplot(data,aes(x=Axis.1,y=Axis.2, fill = class, shape = class))+ geom_point(alpha=0.8, size=7) + theme_bw() + theme(panel.grid = element_blank()) + labs(x=paste0("PCoA1 (",x_label,"%)"), y=paste0("PCoA2 (",y_label,"%)")) + geom_vline(xintercept = 0, color = 'gray', size = 0.4) + geom_hline(yintercept = 0, color = 'gray', size = 0.4) + theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent', size = 1.2),legend.title=element_blank()) + theme(axis.text = element_text(colour = 'black', size = 20), axis.ticks = element_line(colour = 'black', size = 0.6), axis.title = element_text(size = 22), legend.key.size = unit(0.9, 'cm'), legend.text = element_text(size=18), axis.ticks.x = element_line(size=0.8), axis.ticks.y = element_line(size=0.8), axis.ticks.length = unit(0.18, 'cm') ) + scale_shape_manual(values = c(21,22,23,24,25)) +  scale_fill_manual(values=c("lightgoldenrod1", "cornflowerblue", "indianred1", "mediumturquoise","darkolivegreen3")) + geom_text(aes(label=datalabels))

#让标签不重叠!
library(ggrepel)
ggplot(data,aes(x=Axis.1,y=Axis.2, fill = class, shape = class))+ geom_point(alpha=0.8, size=7) + theme_bw() + theme(panel.grid = element_blank()) + labs(x=paste0("PCoA1 (",x_label,"%)"), y=paste0("PCoA2 (",y_label,"%)")) + geom_vline(xintercept = 0, color = 'gray', size = 0.4) + geom_hline(yintercept = 0, color = 'gray', size = 0.4) + theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent', size = 1.2),legend.title=element_blank()) + theme(axis.text = element_text(colour = 'black', size = 20), axis.ticks = element_line(colour = 'black', size = 0.6), axis.title = element_text(size = 22), legend.key.size = unit(0.9, 'cm'), legend.text = element_text(size=18), axis.ticks.x = element_line(size=0.8), axis.ticks.y = element_line(size=0.8), axis.ticks.length = unit(0.18, 'cm') ) + scale_shape_manual(values = c(21,22,23,24,25)) +  scale_fill_manual(values=c("lightgoldenrod1", "cornflowerblue", "indianred1", "mediumturquoise","darkolivegreen3")) + geom_text_repel(aes(label=datalabels))