R :试验设计示意图(第二版)

发布时间 2023-11-09 10:59:56作者: 王哲MGG_AI
# 加载ggplot2包
library(ggplot2)

# 自定义文字大小
axis_title_size <- 18
axis_text_size <- 12
label_text_size <- 3.8
title_size <- 18
facet_label_size <- 14
legend_text_size <- 14  # 调整图例文本大小
legend_key_size <- unit(1, "cm")  # 调整图例键大小

# 自定义框的高度
tile_height <- 0.6

# 自定义分面间距
facet_spacing <- unit(0.3, "cm")

# 创建数据框
sites <- c("Site 1", "Site 2", "Site 3")
weeks <- c("Week 4", "Week 6", "Week 8", "Week 10")
materials <- c("B73", "Mo17")

df <- expand.grid(site = sites, time = weeks, material = materials, replicate = c("Rep 1", "Rep 2", "Rep 3"))

# 创建新标签映射
label_map <- function(site, week, material) {
  site_number <- gsub("Site ", "", site)
  week_number <- gsub("Week ", "", week)
  material_letter <- ifelse(material == "B73", "B", "M")
  paste0(material_letter, site_number, "W", week_number)
}

# 将映射应用到数据框,生成新的标签列
df$label <- mapply(label_map, df$site, df$time, df$material)

# 绘制图形
p <- ggplot(df, aes(x = interaction(time, material, sep = "-", lex.order = TRUE), y = replicate)) + 
  geom_tile(aes(fill = material), color = "white", width = 0.9, height = tile_height) +
  geom_text(aes(label = label), color = "black", size = label_text_size, vjust = 0.5, hjust = 0.5) +
  scale_fill_manual(values = c("B73" = "#00BFFF", "Mo17" = "#FF4500")) +
  facet_wrap(~ site, ncol = 1, scales = "free_y") + 
  labs(title = "Field situation diagram", x = "Growth Stage", fill = "Variety") + 
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, size = axis_text_size),
        axis.text.y = element_text(size = axis_text_size),
        axis.title.x = element_text(size = axis_title_size),
        axis.title.y = element_text(size = axis_title_size),
        plot.title = element_text(size = title_size, hjust = 0.5),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        strip.text = element_text(size = facet_label_size),
        panel.spacing = facet_spacing,
        legend.text = element_text(size = legend_text_size),
        legend.key.size = legend_key_size)

# 打印图形
print(p)