如果需要,你可以提供数据格式、想要的数据处理结果、想使用的语言,我尽力提供帮助,你提供给我练手的机会!!!
本人R语言的使用方式处于边学边用的状态,代码可能不太简洁,后续会逐步改进。
同时选择两种语言进行箱线图生成式因为两者绘制的箱线图的图例是有差别的(左图Python,右图R语言),而Python又无法生成这样的图例
数据格式:
两组对比数据合并在一起进行绘制
代码示例:
library(ggplot2)
library(readxl)
library(dplyr)
library(ggpubr)
library(patchwork)
# 读取数据
data <- read_xlsx('E:/马老师文章数据-红树林秋茄/细菌_alpha_非根际-根际/数据文件.xlsx', sheet = 'data')
# 定义颜色
colors <- c("data1" = "#F8766D", "data2" = "#619CFF")
value_l <- c('ACE', 'Simpson', 'Chao1', 'Shannon')
plots <- list() # 创建一个列表来存储所有的图形对象
for (j in seq_along(value_l)) {
i <- value_l[j]
# 根据指标名称设置纵轴范围
ylim_lower <- if (i == 'ACE') 4000 else if (i == 'Simpson') 0.94 else if (i == 'Chao1') 4000 else 8
ylim_upper <- if (i == 'ACE') 25000 else if (i == 'Simpson') 1.01 else if (i == 'Chao1') 18000 else 12.5
stst_strats_position <- if (i == 'ACE') 24000 else if (i == 'Simpson') 1.007 else if (i == 'Chao1') 17500 else 12.2
p <- ggplot(data, aes_string(x = "Group", y = i, fill = "Type")) +
geom_boxplot(width = 0.5) +
scale_fill_manual(values = colors, name = "") +
labs(y = paste(i, " index"), x = "") +
scale_x_discrete(limits = c('A', 'B', 'C')) +
theme_minimal() +
theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_rect(fill = "white", colour = "white"),
panel.border = element_rect(colour = "black", fill = NA, linewidth = 1),
text = element_text(family = "serif", colour = "black", size = 25),
axis.title = element_text(colour = "black"),
axis.text = element_text(colour = "black"),
legend.text = element_text(colour = "black"),
legend.title = element_text(colour = "black")
) +
scale_color_manual(values = colors, name = "") +
ylim(ylim_lower, ylim_upper) +
stat_compare_means(method = "t.test", label = "p.signif",
label.x = 1.5, label.y = stst_strats_position, vjust = 0.5, hjust = 0.5, size = 10, hide.ns = TRUE)
# 只在第一个子图中显示图例
if (j == 1) {
p <- p + theme(legend.position = "right")
} else {
p <- p + theme(legend.position = "none")
}
plots[[i]] <- p # 将图形对象添加到列表中
}
# 合并图形
combined_plot1 <- wrap_plots(plots, ncol = 1)
# 打印合并后的图形
print(combined_plot1)