所有作品合集传送门: Tidy Tuesday

2018 年合集传送门: 2018

US Tuition Costs

Average Tuition and Educational Attainment in the United States。

Tidy Tuesday 在 GitHub 上的传送地址:
Thomas Mock (2022). Tidy Tuesday: A weekly data project aimed at the R ecosystem. https://github.com/rfordatascience/tidytuesday

1. 一些环境设置

# 设置为国内镜像, 方便快速安装模块
options("repos" = c(CRAN = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))

2. 设置工作路径

wkdir <- '/home/user/R_workdir/TidyTuesday/2018/2018-04-02_US_Tuition_Costs/src-a'
setwd(wkdir)

3. 加载 R 包

library(scales)
library(tidyverse)
library(extrafont)
library(gghighlight)
library(showtext)
# 在 Ubuntu 系统上测试的, 不加这个我画出来的汉字会乱码 ~
showtext_auto()

4. 加载数据

df_input <- readxl::read_excel("../data/us_avg_tuition.xlsx")# 简要查看数据内容
glimpse(df_input)
## Rows: 50
## Columns: 13
## $ State     <chr> "Alabama", "Alaska", "Arizona", "Arkansas", "California", "C…
## $ `2004-05` <dbl> 5682.838, 4328.281, 5138.495, 5772.302, 5285.921, 4703.777, …
## $ `2005-06` <dbl> 5840.550, 4632.623, 5415.516, 6082.379, 5527.881, 5406.967, …
## $ `2006-07` <dbl> 5753.496, 4918.501, 5481.419, 6231.977, 5334.826, 5596.348, …
## $ `2007-08` <dbl> 6008.169, 5069.822, 5681.638, 6414.900, 5672.472, 6227.002, …
## $ `2008-09` <dbl> 6475.092, 5075.482, 6058.464, 6416.503, 5897.888, 6284.137, …
## $ `2009-10` <dbl> 7188.954, 5454.607, 7263.204, 6627.092, 7258.771, 6948.473, …
## $ `2010-11` <dbl> 8071.134, 5759.153, 8839.605, 6900.912, 8193.739, 7748.201, …
## $ `2011-12` <dbl> 8451.902, 5762.421, 9966.716, 7028.991, 9436.426, 8315.632, …
## $ `2012-13` <dbl> 9098.069, 6026.143, 10133.503, 7286.580, 9360.574, 8792.856,…
## $ `2013-14` <dbl> 9358.929, 6012.445, 10296.200, 7408.495, 9274.193, 9292.954,…
## $ `2014-15` <dbl> 9496.084, 6148.808, 10413.844, 7606.410, 9186.824, 9298.599,…
## $ `2015-16` <dbl> 9751.101, 6571.340, 10646.278, 7867.297, 9269.844, 9748.188,…
# 检查数据的列名
colnames(df_input)
##  [1] "State"   "2004-05" "2005-06" "2006-07" "2007-08" "2008-09" "2009-10"
##  [8] "2010-11" "2011-12" "2012-13" "2013-14" "2014-15" "2015-16"

5. 数据预处理

5.1 调整列名

# 将列名简化, 方便绘图展示
tuition <- df_input %>%dplyr::rename("state" = "State","2004" = "2004-05","2005" = "2005-06","2006" = "2006-07","2007" = "2007-08","2008" = "2008-09","2009" = "2009-10","2010" = "2010-11","2011" = "2011-12","2012" = "2012-13","2013" = "2013-14","2014" = "2014-15","2015" = "2015-16")

5.2. 数据倒置

# 从宽数据透视到长数据转换
tuition <- pivot_longer(tuition, cols = "2004":"2015",names_to = "year",values_to = "cost")

5.3. 分组计算历年变化及百分比

df_plot <- tuition %>%group_by(state) %>%arrange(year) %>%# 建议使用 dplyr::mutate 形式调用函数, 不然容易与 plyr 中的函数冲突 (因为我自己就报错了...)dplyr::mutate(change = (dplyr::last(cost) - dplyr::first(cost)),change_perc = change/dplyr::first(cost)*100) %>%ungroup()

6. 利用 ggplot2 绘图

# PS: 方便讲解, 我这里进行了拆解, 具体使用时可以组合在一起
gg <- ggplot(df_plot, aes(x = as.numeric(year), y = cost, color = state))
gg <- gg + geom_line(size = 2)
gg <- gg + geom_point(size = 4)
gg <- gg + scale_colour_viridis_d()
# gghighlight 根据条件高亮其中符合条件的线图
gg <- gg + gghighlight(change_perc > 100, use_group_by = FALSE, unhighlighted_params = list(color = "grey", size = .5))
gg <- gg + scale_x_continuous(breaks = seq(2004, 2015, 1))
# 利用 scales::dollar_format() 函数展示美元符号
gg <- gg + scale_y_continuous(labels = scales::dollar_format())
gg <- gg + labs(title = "美国各个州的大学学费变化",subtitle = "2004年至2015年,三个州的学费增长超过100%",x = NULL,y = NULL)
# theme_minimal() 去坐标轴边框的最小化主题
gg <- gg + theme_minimal()
# theme() 实现对非数据元素的调整, 对结果进行进一步渲染, 使之更加美观
gg <- gg + theme(# panel.grid.major 主网格线, 这一步表示删除主要网格线panel.grid.major = element_blank(),# panel.grid.minor 次网格线, 这一步表示删除次要网格线panel.grid.minor = element_blank(),# axis.text 坐标轴刻度文本axis.text = element_text(color = "black", size = 12),# axis.title 坐标轴标题axis.title = element_text(color = "black", size = 10),# plot.title 主标题plot.title = element_text(color = "black", size = 20, face = "bold"),# plot.subtitle 次要标题plot.subtitle = element_text(color = "red", size = 12),# plot.background 图片背景plot.background = element_rect(fill = "white"))

7. 保存图片到 PDF 和 PNG

gg

albert = '20180402-A-01'
ggsave(filename = paste0(albert, ".pdf"), width = 8.6, height = 5, device = cairo_pdf)
ggsave(filename = paste0(albert, ".png"), width = 8.6, height = 5, dpi = 100, device = "png")

8. session-info

sessionInfo()
## R version 4.2.1 (2022-06-23)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.4 LTS
##
## Matrix products: default
## BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/liblapack.so.3
##
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base
##
## other attached packages:
##  [1] showtext_0.9-5    showtextdb_3.0    sysfonts_0.8.8    gghighlight_0.3.3
##  [5] extrafont_0.18    forcats_0.5.2     stringr_1.4.1     dplyr_1.0.10
##  [9] purrr_0.3.4       readr_2.1.2       tidyr_1.2.1       tibble_3.1.8
## [13] ggplot2_3.3.6     tidyverse_1.3.2   scales_1.2.1
##
## loaded via a namespace (and not attached):
##  [1] httr_1.4.4          sass_0.4.2          jsonlite_1.8.0
##  [4] viridisLite_0.4.1   modelr_0.1.9        bslib_0.4.0
##  [7] assertthat_0.2.1    highr_0.9           googlesheets4_1.0.1
## [10] cellranger_1.1.0    yaml_2.3.5          ggrepel_0.9.1
## [13] Rttf2pt1_1.3.10     pillar_1.8.1        backports_1.4.1
## [16] glue_1.6.2          extrafontdb_1.0     digest_0.6.29
## [19] rvest_1.0.3         colorspace_2.0-3    htmltools_0.5.3
## [22] pkgconfig_2.0.3     broom_1.0.1         haven_2.5.1
## [25] tzdb_0.3.0          googledrive_2.0.0   generics_0.1.3
## [28] farver_2.1.1        ellipsis_0.3.2      cachem_1.0.6
## [31] withr_2.5.0         cli_3.3.0           magrittr_2.0.3
## [34] crayon_1.5.1        readxl_1.4.1        evaluate_0.16
## [37] fs_1.5.2            fansi_1.0.3         xml2_1.3.3
## [40] textshaping_0.3.6   tools_4.2.1         hms_1.1.2
## [43] gargle_1.2.1        lifecycle_1.0.1     munsell_0.5.0
## [46] reprex_2.0.2        compiler_4.2.1      jquerylib_0.1.4
## [49] systemfonts_1.0.4   rlang_1.0.5         grid_4.2.1
## [52] rstudioapi_0.14     labeling_0.4.2      rmarkdown_2.16
## [55] gtable_0.3.1        DBI_1.1.3           R6_2.5.1
## [58] lubridate_1.8.0     knitr_1.40          fastmap_1.1.0
## [61] utf8_1.2.2          ragg_1.2.3          stringi_1.7.8
## [64] Rcpp_1.0.9          vctrs_0.4.1         dbplyr_2.2.1
## [67] tidyselect_1.1.2    xfun_0.32

测试数据

配套数据下载:us_avg_tuition.xlsx

20180402-A · US Tuition Costs · ggplot2, 折线图 · R 语言数据可视化 案例 源码相关推荐

  1. 20180402-B · US Tuition Costs · ggplot2, 条线图 柱状图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 US Tuition Costs Average Tuition and Educational Attainmen ...

  2. 20180402-C · US Tuition Costs · ggplot2, 地图 热力图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 US Tuition Costs Average Tuition and Educational Attainmen ...

  3. 20180416-E · Global Mortality · ggplot2 plotly 动态折线图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 Global Mortality What do people die from? 在过去的几个世纪里,世界发生了很 ...

  4. 20180416-C · Global Mortality · ggplot2 马赛克图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 Global Mortality What do people die from? 在过去的几个世纪里,世界发生了很 ...

  5. 20180402-E · US Tuition Costs · ggplot2, 地图 热力图 gganimate 动图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 US Tuition Costs Average Tuition and Educational Attainmen ...

  6. 20180402-F · US Tuition Costs · pheatmap 绘制热图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 US Tuition Costs Average Tuition and Educational Attainmen ...

  7. 20180409-C · NFL Positional Salaries · ggplot2, 折线图 散点图 分面图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 NFL Positional Salaries NFL Positional Salaries Tidy Tuesd ...

  8. 20180423-B · Australian Salaries by Gender · ggplot2 ggalt geom_dumbbell 棒棒糖图 哑铃图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 Australian Salaries by Gender 欢迎来到ggplot2的世界! ggplot2是一个用来 ...

  9. 20180430-A · ACS Census Data (2015) · ggplot2 maps rcstatebin 地图 热图 蜂窝地图 动态图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 ACS Census Data (2015) 欢迎来到`ggplot2`的世界! ggplot2是一个用来绘制统计图 ...

最新文章

  1. mysql Got error 28 from storage engine
  2. ubuntu 定时执行任务at
  3. 计算机发展最新趋势素材,计算机方面论文范文素材,与关于计算机科学与技术的趋势探究相关论文网...
  4. beego模板语法循环html块,beego 模版语法
  5. vue-router路由详细笔记
  6. oracle查看session阻塞,oracle查询blocking session阻塞情况
  7. 硬件基础知识(7)---电容1
  8. 卡尔曼滤波(Kalman Filter)在目标边框预测中的应用
  9. Grafana+Telegraf+Influxdb监控Tomcat集群方案
  10. 编译OpenJDK12:atomic.hpp: fatal error C1189: size_t is not WORD_SIZE(换了VS2017编译)
  11. 机器学习之监督学习-分类模型K近邻(KNN)算法实现
  12. 20条理由告诉你,为什么当前的深度学习成了人工智能的死胡同?
  13. 给大家推荐一波Python书单,电子版拿走不谢
  14. Python 获取当天零点时间戳
  15. python——t检验和ks检验
  16. vue 直接输入路由地址进入_vue地址栏直接输入路由无效问题的解决
  17. android 开启wifi代码,Android编程打开WiFi
  18. 计算机酷睿处理器排行,2018电脑英特尔处理器排名(cpu性能天梯图)
  19. c#中regex的命名空间_C#_详解C#正则表达式Regex常用匹配,使用Regex类需要引用命名空间 - phpStudy...
  20. 2021年西式面点师(初级)考试题库及西式面点师(初级)考试试题

热门文章

  1. html如何使mp4成为背景,如何让MP4 video视频背景色变成透明?
  2. python:for循环和range()函数用法
  3. emeditor文本编辑器 秘钥
  4. 会声会影2022永久免费版新手小白必备视频剪辑工具
  5. 鸿蒙音响怎么调,专业音响师必知的EQ调整小技巧
  6. 互联网月饼大赏,你最喜欢哪家的?
  7. python七巧板绘制图案_p5.js绘制七巧板图案2020-09-02
  8. eslint报错no-octal-escape.js:41
  9. 理解MySQL主从复制之realy_log_recovery
  10. 用c语言求出1加到100的和