大数跨境
0
0

ggplot2优雅的进行批量绘图-多版本代码

ggplot2优雅的进行批量绘图-多版本代码 R语言数据分析指南
2024-06-13
2

欢迎关注R语言数据分析指南公众号

最近交流群内有朋友问一些循环绘图的方法,本节就来展示多个版本的循环绘图的案例,可以输出单个图也可以合并输出,整个过程仅参考。希望对各位观众老爷能有所帮助。「数据代码将会整合上传到会员交流群」,购买过小编绘图文档的朋友可在所加的会员交流群内获取下载,有需要的朋友可关注文末介绍购买小编的R绘图文档。

加载R包

library(tidyverse)
library(patchwork)
library(ggbeeswarm)
library(ggsci)
library(multcompView)
library(magrittr)
library(wesanderson)

数据读取

# 读取数据并进行过滤和选择
dat <- read_tsv("data.txt") %>% 
  filter(continent != "Oceania") %>% 
  select(234)

years <- unique(dat$year)
city_plots = list()

迭代每个年份,生成绘图并保存

for (i in years) {
  plot <- ggplot(dat %>% filter(year == i),
                 aes(x = continent,y = lifeExp,fill = continent)) +
    geom_violin(scale = "width", width = 0.8) +
    geom_quasirandom(aes(colour = continent), size = 0.5) +
    labs(x = NULL, y = NULL, title = as.character(i)) +
    scale_fill_manual(values=wes_palette("GrandBudapest2",type="discrete"))+
    scale_color_npg() +
    theme(legend.position = "none",
          plot.title = element_text(hjust = 0.5, vjust = 0.5, color = "black", face = "bold", size = 10),
          panel.background = element_blank(),
          axis.line = element_line(color = "black"),
          axis.line.x.top = element_line(color = "black"), 
          axis.text.x.top = element_blank(),
          axis.ticks.y.right = element_blank(),
          axis.text.y.right = element_blank(),
          axis.ticks.x.top = element_blank(),
          axis.text.y = element_text(color = "black", size = 6, face = "bold"),
          axis.text.x = element_text(color = "black", size = 6, face = "bold")) +
    guides(x.sec = "axis", y.sec = "axis")
  # 保存绘图对象到列表
  city_plots[[as.character(i)]] <- plot
  
  # 打印并保存每个年份的图
  #print(plot)
  ggsave(filename = paste0("plot_", i, ".pdf"), plot = plot,
        # width = 3.9, height = 2.53,
         units = "in", dpi = 300)
}
# 使用patchwork包将所有图拼接在一起
wrap_plots(city_plots, nrow = 3)

purrr版循环

dat <- read_tsv("data.txt") %>% 
  filter(continent != "Oceania") %>% 
  select(234)

# 获取唯一年份列表
years <- unique(dat$year)
# 创建绘图函数
create_plot <- function(i) {
  plot <- ggplot(dat %>% filter(year == i),aes(x = continent,
                     y = lifeExp, fill = continent)) +
    geom_violin(scale = "width", width = 0.8) +
    geom_quasirandom(aes(colour = continent), size = 0.5) +
    labs(x = NULL, y = NULL, title = as.character(i)) +
    scale_fill_manual(values=wes_palette("GrandBudapest2",type="discrete"))+
    scale_color_npg() +
    theme(legend.position = "none",
          plot.title = element_text(hjust = 0.5, vjust = 0.5, color = "black", face = "bold", size = 10),
          panel.background = element_blank(),
          axis.line = element_line(color = "black"),
          axis.line.x.top = element_line(color = "black"), 
          axis.text.x.top = element_blank(),
          axis.ticks.y.right = element_blank(),
          axis.text.y.right = element_blank(),
          axis.ticks.x.top = element_blank(),
          axis.text.y = element_text(color = "black", size = 6, face = "bold"),
          axis.text.x = element_text(color = "black", size = 6, face = "bold")) +
    guides(x.sec = "axis", y.sec = "axis")
  
  ggsave(filename = paste0("plot_", i, ".pdf"), plot = plot, width = 3.9, height = 2.53, units = "in", dpi = 300)
  
  return(plot)
}

# 使用 map 函数生成每个年份的图表并打印
city_plots <- map(years, ~ {
  plot <- create_plot(.x)
#  print(plot)
  plot
})

# 使用 patchwork 包将所有图拼接在一起
wrap_plots(city_plots, nrow = 3)

循环+方差分析

# 读取数据并进行过滤和选择
data <- read_tsv("data.txt") %>% 
  filter(continent != "Oceania") %>% 
  select(234)

# 创建绘图函数
make_plot <- function(data) {
  ggplot(data, aes(x = continent, y = lifeExp.x, fill = continent)) +
    geom_violin(scale = "width", width = 0.8) +
    geom_quasirandom(aes(colour = continent), size = 0.5) +
    geom_text(aes(label = Tukey, y = lifeExp.y + 3)) +
    labs(x = NULL, y = NULL, title = unique(data$year)) +
    scale_fill_manual(values=wes_palette("GrandBudapest2",type="discrete"))+
    scale_color_npg() +
    theme(legend.position = "none",
          plot.title = element_text(hjust = 0.5, vjust = 0.5, color = "black", face = "bold", size = 10),
          panel.background = element_blank(),
          axis.line = element_line(color = "black"),
          axis.line.x.top = element_line(color = "black"), 
          axis.text.x.top = element_blank(),
          axis.ticks.y.right = element_blank(),
          axis.text.y.right = element_blank(),
          axis.ticks.x.top = element_blank(),
          axis.text.y = element_text(color = "black", size = 6, face = "bold"),
          axis.text.x = element_text(color = "black", size = 6, face = "bold")) +
    guides(x.sec = "axis", y.sec = "axis")
}

# 分割数据并进行ANOVA和Tukey HSD检验
aov_data <- data %>%
  split(.$year) %>%
  map_dfr(~{
    anova <- aov(lifeExp ~ continent, data = .x)
    tukey_result <- TukeyHSD(anova)
    cld <- multcompLetters4(anova, tukey_result)
    
    # 提取显著性标记并添加到数据中
    .x %>%
      group_by(continent, year) %>%
      summarise(lifeExp = max(lifeExp), .groups = 'drop') %>%
      mutate(Tukey = cld$continent$Letters)
  })

# 合并并绘图
plots <- data %>%
  left_join(aov_data, by = c("continent""year")) %>%
  split(.$year) %>%
  map(make_plot)

walk2(plots, names(plots), ~ggsave(filename = paste0("plot_aov-", .y, ".pdf"),
                                   plot = .x,
                                   width = 3.9, height = 2.53, units = "in", dpi = 300))
# 使用patchwork包将所有图拼接在一起
wrap_plots(plots, ncol = 4, nrow = 3)

关注下方公众号下回更新不迷路

本节介绍到此结束,有需要获取此文档数据的朋友,欢迎到淘宝店铺R语言数据分析指南,购买小编的R数据可视化案例文档(2024版),「购买将赠送2023年的绘图文档内容」。目前此文档(2023+2024)「已经更新上传了150+案例文档」,每个案例都附有相应的数据和代码,并配有对应的注释文档,方便大家学习和参考。

2024更新的绘图内容同时包含数据+代码+markdown注释文档+文档清单,「小编只分享案例文档不额外回答问题无答疑问。」

在线同步更新

淘宝店铺

2024年案例图展示

2023年案例图展示

【声明】内容源于网络
0
0
R语言数据分析指南
R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
内容 1180
粉丝 0
R语言数据分析指南 R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
总阅读64
粉丝0
内容1.2k