本系列内容来自github上面超级火爆的R语言可视化项目:tidyTuesday。是学习R语言数据分析和可视化极好的素材。
- CSDN项目地址:数绘小站的博客_CSDN博客-Tidy Tuesday[1]
我只是搬运工,感谢小伙伴的分享。
Tidy Tuesday 在 GitHub 上的传送地址:Thomas Mock (2022). Tidy Tuesday: A weekly data project aimed at the R ecosystem. https://github.com/rfordatascience/tidytuesday
在这里插入图片描述
1. 一些环境设置
代码语言:javascript复制# 设置为国内镜像, 方便快速安装模块
options("repos" = c(CRAN = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
2. 设置工作路径
代码语言:javascript复制wkdir <- '/home/user/R_workdir/TidyTuesday/2018/2018-04-09_NFL_Positional_Salaries/src-d'
setwd(wkdir)
3. 加载 R 包
代码语言:javascript复制library(tidyverse)
library(ggbeeswarm)
library(showtext)
# 在 Ubuntu 系统上测试的, 不加这个我画出来的汉字会乱码 ~
showtext_auto()
4. 加载数据
代码语言:javascript复制df_input <- readxl::read_excel("../data/nfl_salary.xlsx")
# 简要查看数据内容
glimpse(df_input)
## Rows: 800
## Columns: 11
## $ year <dbl> 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 20…
## $ Cornerback <dbl> 11265916, 11000000, 10000000, 10000000, 10000000, …
## $ `Defensive Lalbert` <dbl> 17818000, 16200000, 12476000, 11904706, 11762782, …
## $ Linebacker <dbl> 16420000, 15623000, 11825000, 10083333, 10020000, …
## $ `Offensive Lineman` <dbl> 15960000, 12800000, 11767500, 10358200, 10000000, …
## $ Quarterback <dbl> 17228125, 16000000, 14400000, 14100000, 13510000, …
## $ `Running Back` <dbl> 12955000, 10873833, 9479000, 7700000, 7500000, 703…
## $ Safety <dbl> 8871428, 8787500, 8282500, 8000000, 7804333, 76527…
## $ `Special Teamer` <dbl> 4300000, 3725000, 3556176, 3500000, 3250000, 32250…
## $ `Tight End` <dbl> 8734375, 8591000, 8290000, 7723333, 6974666, 61333…
## $ `Wide Receiver` <dbl> 16250000, 14175000, 11424000, 11415000, 10800000, …
# 检查数据的列名
colnames(df_input)
## [1] "year" "Cornerback" "Defensive Lineman"
## [4] "Linebacker" "Offensive Lineman" "Quarterback"
## [7] "Running Back" "Safety" "Special Teamer"
## [10] "Tight End" "Wide Receiver"
5. 数据预处理
代码语言:javascript复制# 整理数据, 从宽数据透视到长数据转换
df_plot <- df_input %>%
# pivot_longer() 从宽数据透视到长数据转换
pivot_longer(cols = -year,
names_to = "position",
values_to = "salary_position") %>%
# 去除缺失值
filter(!is.na(salary_position))
# 简要查看数据内容
glimpse(df_plot)
## Rows: 7,944
## Columns: 3
## $ year <dbl> 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, …
## $ position <chr> "Cornerback", "Defensive Lineman", "Linealbert", "Offe…
## $ salary_position <dbl> 11265916, 17818000, 16420000, 15960000, 17228125, 1295…
6. 利用 ggplot2 绘图
代码语言:javascript复制# PS: 方便讲解, 我这里进行了拆解, 具体使用时可以组合在一起
gg <- ggplot(df_plot, aes(year, salary_position / 1000000, group = year))
# geom_quasirandom() 绘制抖动散点图
gg <- gg geom_quasirandom(size = 0.7, alpha = .3, colour = "#FF7F50")
# facet_wrap() 可视化分面图, ncol = 5 表示有五列
gg <- gg facet_wrap( ~ position, ncol = 5)
# scale_y_continuous() 对连续变量设置坐标轴显示范围
gg <- gg scale_y_continuous(labels = scales::dollar_format(suffix = "m"))
# labs() 对图形添加注释和标签(包含标题、子标题、坐标轴和引用等注释)
gg <- gg labs(title = "NFL中不同位置的工资情况",
subtitle = NULL,
x = NULL,
y = '薪资',
caption = "NFL Quarterback Salaries · graph by 数绘小站")
# theme_minimal() 去坐标轴边框的最小化主题
gg <- gg theme_minimal()
# theme() 实现对非数据元素的调整, 对结果进行进一步渲染, 使之更加美观
gg <- gg theme(
# panel.grid.major 主网格线, 这一步表示删除主要网格线
panel.grid.major = element_line("grey", size = 0.2),
# panel.grid.minor 次网格线, 这一步表示删除次要网格线
panel.grid.minor = element_blank(),
# axis.text 坐标轴刻度文本
axis.text = element_text(color = "black", size = 9),
# axis.title 坐标轴标题
axis.title = element_text(color = "black", size = 12),
# axis.ticks 坐标轴刻度线
axis.ticks = element_blank(),
# plot.title 主标题
plot.title = element_text(hjust = 0.5, color = "black", size = 16, face = "bold"),
# plot.background 图片背景
plot.background = element_rect(fill = "white"),
# strip.text 自定义分面图每个分面标题的文字
strip.text = element_text(face = "bold", size = rel(0.8), vjust = -.2),
# strip.background 自定义分面图每个分面的背景颜色
strip.background = element_blank())
7. 保存图片到 PDF 和 PNG
代码语言:javascript复制gg
1
在这里插入图片描述
代码语言:javascript复制filename = '20180409-D-01'
ggsave(filename = paste0(filename, ".pdf"), width = 8.6, height = 5, device = cairo_pdf)
ggsave(filename = paste0(filename, ".png"), width = 8.6, height = 5, dpi = 100, device = "png")
测试数据
配套数据下载:nfl_salary.xlsx[2]
本次内容来自CSDN,我只是搬运工,项目地址:数绘小站的博客_CSDN博客-Tidy Tuesday[3]
参考资料
[1] CSDN项目地址: https://blog.csdn.net/Albert_XN?type=blog
[2] 数据下载: https://gitee.com/tidytuesday/tt-data/tree/master/2018/2018-04-09
[3] CSDN项目地址: https://blog.csdn.net/Albert_XN?type=blog