首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ggplot2优雅的进行批量绘图-多版本代码

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

作者头像
R语言数据分析指南
发布于 2024-06-18 09:49:32
发布于 2024-06-18 09:49:32
30500
代码可运行
举报
运行总次数:0
代码可运行

加载R包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(tidyverse)
library(patchwork)
library(ggbeeswarm)
library(ggsci)
library(multcompView)
library(magrittr)
library(wesanderson)

数据读取

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

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

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

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

purrr版循环

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
# 读取数据并进行过滤和选择
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
你的心事我全知晓——心情日记小程序丨实战
1、通过wx.createInnerAudioContext()获取实例 ,安卓机上音乐能正常播放,IOS上不行,具体原因感兴趣的可以去深究一下;
腾讯云开发TCB
2019/08/14
7400
原生微信小程序+云开发,源码给你们多久能开流量主?(下)
文章链接:https://cloud.tencent.com/developer/article/2466737
一起重学前端
2024/11/20
1800
小程序云开发全套实战教程(最全)
在学习云开发的时候将自己的学习过程记录下来了,放在了网上,收获了一波好评,今天下午在办公室没有事情,也发现之前有人在博客里面评论,你这个教程还有一半哩,可能是csdn的自动搬运功能出来一点小问题,没有搬运成功吧,这里就手动复制粘贴成为一篇了,篇幅比较长,如果有不足或者不注意写错的地方,欢迎大家提出纠正哦。
王小婷
2019/01/28
16.3K2
【云+社区年度征文】基于云开发完成小程序用户注册登录
之前,如果我们想要开发一个小程序,运维人员需要考虑买什么样的服务器,匹配哪些资源,比如存储应用、数据库等,后端开发人员需要编写服务接口,前端人员需要编写页面,对接后端提供的接口,这个工作流程下来,需要至少一个月的时间。有了“小程序 · 云开发”以后,开发者不用考虑后端复杂的技术操作,一个前端开发者就可以轻松的完成从无到有、从开发到发布的过程。
青年码农
2020/11/25
4.5K14
【云+社区年度征文】基于云开发完成小程序用户注册登录
微信小程序云开发入门详细教程
通过以上清晰的对比,我们可以看出,如果小团队想要快速创建一个小程序的后台,用云开发是一个很好的选择。
bug开发工程师007
2024/11/13
4.4K3
教你用云开发打造一个双端自动发布的博客体系(下)
上期文章主要介绍了博客项目的背景、技术选型、开发框架和系统设计部分的内容,承接上期,下文主要介绍该小程序的登录方式配置、分享和订阅消息功能是如何实现的。 1 数据库 文章: sync_posts = [   {     _id: String,     createTime: String,     slug: String,     title: String,     tags: Array,     description: String,     cover: String, // ur
腾讯云开发TCB
2020/08/21
5240
微信小程序与云开发
Java、NodeJS、JavaScript、HTML5、CSS3、VueJs、ReactJs、前端工程化、前端架构
达达前端
2019/08/05
9.5K0
微信小程序与云开发
cocos creator 部署微信云开发
把刚刚授权好的用户信息通过微信云函数保存到微信云数据库中。所以这里需要一个数据库和一个云函数。
全栈程序员站长
2022/11/17
3.5K0
cocos creator 部署微信云开发
小程序云函的那些事
已经很长时间没写小程序了,也没怎么留意云开发小程序那部分的发展情况。但最近因为新开一个物联项目进行阶段性开发测试,所以就重新了解小程序和云开发,云开发虽然还是由以前的云数据库、云存储和云函数组成。但里面功能加强了很多,就云数据库里面的功能也加入了不少,例如联表(aggregate())、分页等都已经很成熟了。今天就记录一下云函数的那些事。。
谭广健
2020/03/06
7540
从头到尾撸个疫情期间针对学生信息报备的小程序(微信小程序+云开发实践
初学小程序,每天起床第一件事不是去看文档,而是打开班群接龙打卡信息,填写ex表(苦逼的大二狗每天群通知99+),所以萌生了写一款让学生报备信息的小程序。本来只是简单写了一个上报表单的程序,但是写完了之后又觉得好像缺了点什么,所以功能越写越多,项目不断重构,里面很多东西都是现学现用,陆陆续续写了10天左右,算是一滴都不剩了。。不对,是差不多写得没想法了,项目包含了一整套前后端的交互,由于很多数据前期和后期设计理念不一样,简称自己打自己脸,所以会有很多不完善的地方,希望大家轻喷。。。 ( ゜ェ゜ ) 废话不多说,现在主要讲一下该项目的设计思路和一些功能的实现思路。
问号就是我
2020/02/22
1.2K1
从头到尾撸个疫情期间针对学生信息报备的小程序(微信小程序+云开发实践
【小程序+云开发】实战:一天搭建小型论坛
笔者最近涉猎了小程序相关的知识,于是利用周末时间开发了一款类似于同事的小程序,深度体验了小程序云开发模式提供的云函数、数据库、存储三大能力。关于云开发,可参考文档:小程序·云开发。
达文西
2018/11/25
4.5K1
【今天吃什么】uniApp和微信小程序同款炫酷摇一摇来告诉你!
本篇文章是用UniApp开发的,但是由于调用的API只是被UniApp封装好的微信API,所以整个功能是可以完全使用微信小程序原生开发的。
猿来是前端
2022/12/17
1.5K0
【今天吃什么】uniApp和微信小程序同款炫酷摇一摇来告诉你!
几行代码解决云开发微信支付
新版二手书小程序的进程每天都在更新了,中午抽时间赶到了支付阶段,第一次使用云开发进行小程序支付,体验了下,真的方便。
许坏
2019/09/09
2.9K0
几行代码解决云开发微信支付
微信小程序--云开发支付闭环
云开发支付流程闭环 extends 微信小程序--使用云开发完成支付闭环 在上述文章中,我们对支付结果的处理更多依赖于小程序端的操作 订单号存储在小程序端 支付结果采用小程序端定时触发器轮询
Kindear
2021/06/10
4.4K0
微信小程序--云开发支付闭环
为了考PMP,我做了一个刷题小程序
1.我是一名软件工程师,技术出身,担任开发组长,对项目管理不是很熟,所以决定系统学习下项目管理。
悟空聊架构
2019/07/01
2.9K3
为了考PMP,我做了一个刷题小程序
小程序开发技巧总结(三)-- 云开发时效数据刷新和存储 (access_token等)
小程序中经常有需要进行OCR识别,或者使用外部api例如百度AI识别等接口,请求调用这些接口需要令牌,即一些具有时效性的数据。本文以小程序云开发使用百度API接口为例,介绍access_token定时刷新和请求机制。
Kindear
2020/03/19
1.6K0
小程序开发技巧总结(三)-- 云开发时效数据刷新和存储 (access_token等)
实战 | 用云开发从0到1实现一个校园社交小程序
https://cloud.tencent.com/document/product/876/68589
腾讯云开发TCB
2022/02/17
1.6K0
实战 | 用云开发从0到1实现一个校园社交小程序
小程序云开发常用语句宝库
查询语句,返回的是 res.data[] 数组 调用云函数返回的是res.result get 数据获取返回的是 res.data{} 对象 1.调用云函数 this.DB = wx.cloud.database() wx.cloud.init({ env: 'mm-4t7rg' }) wx.cloud.callFunction({ name: "login", data: {}, success(res) { console.log('个人信息-------------',res.
IT工作者
2022/02/16
3700
基于微信小程序云开发(校园许愿墙app)妄想替代学校的表白墙
随着移动端的不断发展,人们大部分的办公及生活应用都开始趋向于移动端。然而在2017年“微信之父”张小龙带领团队,开发了一款叫做微信小程序的东西,它的出现打破了人们认识移动端的隔膜,由以前的需要先下载app然后在开始工作的老式模式,逐渐的趋向于小程序app(无需下载)的形式。
淼学派对
2022/11/20
1.7K0
基于微信小程序云开发(校园许愿墙app)妄想替代学校的表白墙
【小程序云开发】云函数路由的高效配置
在小程序开发工具中,启动云开发默认模板,提供的云函数办法是一个请求对应一个云函数,比如说,我要获取用户登录数据,就添加一个login函数,然后前端就请求这个login获取,如果现在我要通过云函数删除我的使用用户,是不是就得重新再建一个函数如delete,然后这个delete就用于处理前端提交的用户删除任务,如果到时候任务多了,不就需要创建很多个云函数了吗?麻烦,所以我们想办法一个函数处理多个任务,这就需要使用云函数路由了。
许坏
2019/07/14
1.7K0
推荐阅读
相关推荐
你的心事我全知晓——心情日记小程序丨实战
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 加载R包
  • 数据读取
  • 迭代每个年份,生成绘图并保存
  • purrr版循环
  • 循环+方差分析
  • 关注下方公众号下回更新不迷路
  • 在线同步更新
  • 2024年案例图展示
  • 2023年案例图展示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档