ggplot2 | 世界杯赛程的可视化就交给我吧!~

news2025/1/18 16:49:51

11. 写在前面

昨天卡塔尔🇶🇦输了比赛真是让人大跌眼镜啊😱,打破了世界杯东道主必胜的神律,也不知道王子们是怎么想的。🤣
今天是英格兰🏴󠁧󠁢󠁥󠁮󠁧󠁿Vs伊朗🇮🇷,🐷各位好运!~😘
后面的赛事我们就用ggplot画一个赛程图吧😁, 效果图如下:👇

alt

22. 用到的包

rm(list = ls())
library(tidyverse)
library(tmcn)
library(lubridate)
library(RColorBrewer)

33. 示例数据

这里我事先在网上爬了赛程下来,这里就直接读入了。

dat <- read.csv("./Worldcup.csv")
alt

44. 繁体转简体

由于是繁体字,不方便阅读,这里我们转成简体字。🤗

colnames(dat) <- toTrad(colnames(dat),rev = T)

dat <- separate(data = dat, col = 比赛详情, into = c("比赛详情", "小组"), sep = "|") %>%
dplyr::select(., c(6, 1, 2, 3, 4,5))

colnames(dat) <- c( "date", "time", "match", "group", "team1","team2")

dat <- map_df(dat, function(x){toTrad(x, rev = T)})

转成简体字以后,发现还是有2个字没有转换成功,可能是包内没有对应的字体吧。😢

alt

这里我们再手动转一下。🤒

dat <- map_df(dat, function(x){gsub("準", "准", x)})
dat <- map_df(dat, function(x){gsub("佈", "布", x)})

55. 日期转换与合并

接着我们把日期提取出来转换一下,转成标准的yyyy-mm-dd样式。😉

dat$date <- dat$date %>% 
gsub("月","-",.) %>%
gsub("日", "",.) %>%
paste(2022, ., sep = "-") %>%
as.Date()

dat <- unite(dat, date, time, col = "match_time", sep = " ",remove = F)

再生成一下单独的,后面会用到。😏

dat <- dat %>% 
mutate(d = day(.$date),
mon = month(.$date)
)

66. 整理比赛信息

这里我们把比赛信息整理出来,team1对阵team2,再把第x轮比赛转换成factor。😚

dat <- unite(dat, team1, team2, col = "game", sep = " vs ")

dat$match <- factor(dat$match, levels = unique(dat$match))

head(dat)
alt

77. 绘图参数设置

7.1 线段参数

这里我们设置一下线段长度方向。🧐

positions <- c(0.5, -0.5, 1.0, -1.0, 1.5, -1.5)
directions <- c(1, -1)

line_pos <- data.frame(
"date" = unique(dat$date),
"position" = rep(positions, length.out=length(unique(dat$date))),
"direction" = rep(directions, length.out=length(unique(dat$date)))
)

接着我们合并到前面的data.frame里。😗

df <- merge(x=dat, y=line_pos, all = TRUE)

head(df)
alt

7.2 设置比赛信息文本

由于同一天可能有多个比赛,为了不让他们重叠,我们要在纵向上让他们位置稍微错开一下。😁

text_offset <- 0.05

df$date_count <- ave(df$date==df$date, df$date, FUN=cumsum)
df$text_position <- (df$date_count * text_offset * df$direction) + df$position

7.3 设置天数文本

day_buffer <- 2

day_date_range <- seq(min(df$date) - days(day_buffer),
max(df$date) + days(day_buffer),
by='day')

day_format <- day(day_date_range)

day_df <- data.frame(day_date_range, day_format)

7.4 设置月份文本

month_date_range <- seq(min(df$date) - months(1), 
max(df$date) + months(1),
by='month')

month_date_range <- as.Date(
intersect(
ceiling_date(month_date_range, unit="month"),
floor_date(month_date_range, unit="month")
),
origin = "1970-01-15"
)

month_format <- format(month_date_range, '%B')

month_df <- data.frame(month_date_range, month_format)

88. ggplot2可视化

由于涉及到中文显示,这里我们用一下showtext包。🤨

library(showtext)
showtext_auto()

8.1 初步绘图

colorcount <- length(unique(dat$match))

p <- df %>%
ggplot(aes(x = date, y = 0, col = match, label = game)) +
geom_hline(yintercept = 0, color = "black", size = 0.3) +
geom_segment(aes(y=position, yend=0, xend = date),
color='black', size=0.2) +
geom_point(aes(y=0), size=3)+
scale_color_manual(values = colorRampPalette(brewer.pal(8, "Set1"))(colorcount))
p
alt

8.2 添加天数文本

# Show text for each month
p<-p +
geom_text(data = day_df,
aes(x=day_date_range,y=-0.1,label=day_format),
size=2.5,vjust=0.5, color='black', angle = 0)

p
alt

8.3 添加月份文本

# Show year text
p<-p+
geom_text(data=month_df,
aes(x=month_date_range, y = -0.2,
label=month_format,
fontface="bold"),
size=3, color='black')

p
alt

8.4 添加比赛信息文本

# Show text for each milestone
p<-p +
geom_text(aes(y=text_position,label = game),size=2.5)+
theme(text = element_text(family=""))

p
alt

8.5 美化细节

# Don't show axes, appropriately position legend
p<-p+
theme_bw()+
theme(axis.line.y = element_blank(),
axis.text.y=element_blank(),
axis.title.y=element_blank(),
axis.ticks.y=element_blank(),
axis.title.x=element_blank(),
axis.text.x =element_blank(),
axis.ticks.x =element_blank(),
axis.line.x =element_blank(),
panel.grid = element_blank(),
legend.position = "right",
legend.title = element_blank())
p
alt

最后祝大家早日不卷!~

点个在看吧各位~ ✐.ɴɪᴄᴇ ᴅᴀʏ 〰

📍 往期精彩

📍 🤩 ComplexHeatmap | 颜狗写的高颜值热图代码!
📍 🤥 ComplexHeatmap | 你的热图注释还挤在一起看不清吗!?
📍 🤨 Google | 谷歌翻译崩了我们怎么办!?(附完美解决方案)
📍 🤩 scRNA-seq | 吐血整理的单细胞入门教程
📍 🤣 NetworkD3 | 让我们一起画个动态的桑基图吧~
📍 🤩 RColorBrewer | 再多的配色也能轻松搞定!~
📍 🧐 rms | 批量完成你的线性回归
📍 🤩 CMplot | 完美复刻Nature上的曼哈顿图
📍 🤠 Network | 高颜值动态网络可视化工具
📍 🤗 boxjitter | 完美复刻Nature上的高颜值统计图
📍 🤫 linkET | 完美解决ggcor安装失败方案(附教程)
📍 ......

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 调试之strace

文章目录前言一、strace 例子1.1 strace 跟踪 free1.2 strace 跟踪 dd1.3 strace 其他一些使用选项二、strace 原理2.1 ptrace简介2.2 strace 原理总结参考资料前言 strace命令是Linux系统调用跟踪器&#xff0c;可以跟踪系统调用&#xff0c;为每个系统调用打印一行信息&…

浅谈SQL Server索引视图(物化视图)以及索引视图与查询重写

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;正文 1. 物化视图&#xff08;索引视图&#xff09;与查询重写的基本概念 2. 创建测试环境 &#xff08;1&#xff09;建表 &#xff08;2&#xff09;写数据 3. 索引视图创建 &#xff08;1&#xff0…

一篇文章详解Linux的用户和权限

教程推荐&#xff1a;Linux零基础快速入门到精通 认知root用户 root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 •在Linux系统中&#xff0c;拥有最大权限的账户名为&#xff1a;root&#xff08;超级管理员&a…

第十七届全国人机语音通讯学术会议(NCMMSC 2022) | 早鸟票开放注册了

全国人机语音通讯学术会议是国内语音领域广大专家、学者和科研工作者交流最新研究成果&#xff0c;促进该领域研究和开发工作不断进步的重要舞台。该系列会议自1990年开创以来已成功召开了十六届。2022年第十七届全国人机语音通讯学术会议&#xff08;National Conference on M…

移动WEB开发之流式布局--移动端常见布局--流式布局

移动端技术选型 移动端布局和以前我们学习的PC端有所区别&#xff1a; 1. 单独制作移动端页面&#xff08;主流&#xff09; 流式布局&#xff08;百分比布局&#xff09; flex 弹性布局&#xff08;强烈推荐&#xff09; lessrem媒体查询布局 混合布局 2. 响应式页面兼…

ConcurrentHashMap的实现原理是分段锁?你Out了

前言 Java后端开发面试的时候&#xff0c;一场好的面试&#xff0c;是无论如何也绕不开并发编程的。并发编程里面往往有个很重要的类可能会被拿出来探讨&#xff1a;ConcurrentHashMap。 ConcurrentHashMap是HashMap的线程安全版。大家都知道HashMap的高性能&#xff0c;但是H…

动静态库的制作

目录 一.动静态库的原理 二.静态库 2.1制作静态库 2.2使用静态库 三.动态库 3.1制作动态库 3.2动态库的使用 一.动静态库的原理 首先要知道可执行程序的生成过程&#xff1a;1&#xff0c;预处理 2&#xff0c;编译 3&#xff0c;汇编 4 &#xff0c;链接 1.预处理 头…

03 LaTex之标题页摘要

1.标题页 \title{{ABC}\footnote{explain}}%生成标题和标题的脚注\author{\small $^a$lay \qquad $^b$winter \footnote{super star}\\%换行符 %作者信息 \small $^a$ lays brief\\ \small lays address, 710021\\%换行 \small $^b$ winters introduction \\ \small winters …

0101 蓝桥杯真题04

/* * 马虎的算式 * 小明是个急性子&#xff0c;上小学的时候经常把老师写在黑板上的题目抄错了。 * 有一次&#xff0c;老师出的题目是&#xff1a;36 x 495 ? * 他却给抄成了&#xff1a;396 x 45 ? * 但结果却很戏剧性&#xff0c;他的答案竟然是对的&#xff01;&a…

同花顺_代码解析_技术指标_Z_3

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 ZNZ_DPCYC1 ZNZ_DPCYR ZNZ_HLD ZNZ_HUO ZNZ_MYL1 ZNZ_MYP1 ZNZ_PAS ZNZ_PAS1 ZNZ_RPY1 ZNZ_RPY2 ZNZ_SDR ZNZ_TAO ZNZ_YHBOL1 ZNZ_YHCBB ZX ZNZ_DPCYC1 大盘成本均线 行…

python 给图片添加噪声

import numpy as np import cv2 import matplotlib.pyplot as plt import skimage from skimage import io import randomdef addGaussNoise(origin,var0.0005):#添加高斯噪声函数var random.uniform(0.0001, 0.04)noisy skimage.util.random_noise(origin, modegaussian, va…

idea iu 2021 Mac版本的使用,如何创建java web项目,包括tomcat和web包

Java web系列文章目录 第一章 前端学习入门之idea iu 2021版本的使用 目录Java web系列文章目录前言一、Java web是什么&#xff1f;二、配置步骤1.下载Tomcat服务器2.idea iu 2021版本界面总结前言 随着前端的学习路径&#xff0c;java web项目不可避免要学习使用&#xff0…

YUV与RGB 以及之间的转换

目录 一、RGB 二、YUV 三、YUV类型和存储方式 1、类型 2、存储方式 四、分析YUV 4:2:0 1、YU12(I420&#xff0c;YUV420P) 2、YV12 3、NV12(YUV420SP) 4、NV21(YUV420SP) 5、占用空间大小比较 五、RGB与YUV之间的转换 1、转换标准 2、Color Range 3、计算公式 在…

【ArcGIS】属性表导出及乱码问题

这玩意其实说难不难&#xff0c;但是乱码有时候还是烦人 直接复制到EXCEL 部分表细节被我删掉了 直接点击全选&#xff0c;然后复制&#xff0c;再到EXCEL里粘贴。我有时候就是这么干的。而且量大概是二十万行左右。 Table to Table 如果你的属性文件大于65533行&#xff…

十一、组合API(1)

本章概要 为什么要引入组合APIsetup() 函数 组合&#xff08;Composition&#xff09;API 是在 Vue 3.0 中引入的&#xff0c;它是一组附加的、基于函数的 API &#xff0c;允许灵活地组合组件逻辑。 组合 API 并没有引入新的概念&#xff0c;更多地是将 Vue 的核心功能&…

项目相互依赖调用解决方法两种方法

Bmodel依赖于Amodel&#xff0c;但是Amodel又需要BModel的信息。原来是在Amodel创建一块内存&#xff0c;在Bmodel中将内存地址赋给这块内存&#xff0c;然后在Amodel去做其他操作。 方法一&#xff1a;采用静态变量static链接&#xff1a;C开发中一个解决方案里&#xff0c;两…

LeetCode 0808. 分汤:好题【感叹号】

【LetMeFly】808.分汤&#xff1a;好题&#xff01; 力扣题目链接&#xff1a;https://leetcode.cn/problems/soup-servings/ 有 A 和 B 两种类型 的汤。一开始每种类型的汤有 n 毫升。有四种分配操作&#xff1a; 提供 100ml 的 汤A 和 0ml 的 汤B 。提供 75ml 的 汤A 和 2…

Google Earth Engine(GEE)—— 各矿区时序NDVI变化图(包含具体的运行函数)

函数: ee.Filter.eq(name, value) Filter to metadata equal to the given value. Returns the constructed filter. Arguments: name (String): The property name to filter on. value (Object): The value to compare against. Returns: Filter ui.Chart.image.s…

7、Jedis测试

文章目录7、Jedis测试7.1. Jedis所需要的jar包7.2. 连接Redis注意事项7.3. Jedis常用操作7.3.1. 创建动态的工程7.3.2. 创建测试程序7.4. 测试相关数据类型7.4.1. Jedis-API&#xff1a;Key7.4.2. Jedis-API&#xff1a;String7.4.3. Jedis-API&#xff1a;List7.4.4. Jedis-AP…

葡萄糖-聚乙二醇-6-羧甲基荧光素 Glucose-PEG-6-FAM

葡萄糖-聚乙二醇-6-羧甲基荧光素 Glucose-PEG-6-FAM 中文名称&#xff1a;葡萄糖-6-羧甲基荧光素 英文名称&#xff1a;Glucose-6-FAM 别称&#xff1a;6-羧甲基荧光素标记葡萄糖&#xff0c;6-羧甲基荧光素-葡萄糖 PEG接枝修饰葡萄糖 Glucose-PEG-6-FAM 葡萄糖-聚乙二醇…