前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ggplot2优雅的进行批量绘图-多版本代码

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

作者头像
R语言数据分析指南
发布2024-06-18 17:49:32
1070
发布2024-06-18 17:49:32
举报

加载R包

代码语言:javascript
复制
library(tidyverse)
library(patchwork)
library(ggbeeswarm)
library(ggsci)
library(multcompView)
library(magrittr)
library(wesanderson)

数据读取

代码语言:javascript
复制
# 读取数据并进行过滤和选择
dat <- read_tsv("data.txt") %>% 
  filter(continent != "Oceania") %>% 
  select(2, 3, 4)

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

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

代码语言:javascript
复制
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)
}
代码语言:javascript
复制
# 使用patchwork包将所有图拼接在一起
wrap_plots(city_plots, nrow = 3)

purrr版循环

代码语言:javascript
复制
dat <- read_tsv("data.txt") %>% 
  filter(continent != "Oceania") %>% 
  select(2, 3, 4)

# 获取唯一年份列表
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)

循环+方差分析

代码语言:javascript
复制
# 读取数据并进行过滤和选择
data <- read_tsv("data.txt") %>% 
  filter(continent != "Oceania") %>% 
  select(2, 3, 4)

# 创建绘图函数
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年案例图展示

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言数据分析指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 加载R包
  • 数据读取
  • 迭代每个年份,生成绘图并保存
  • purrr版循环
  • 循环+方差分析
  • 关注下方公众号下回更新不迷路
  • 在线同步更新
  • 2024年案例图展示
  • 2023年案例图展示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档