欢迎关注R语言数据分析指南
❝本节再来介绍一个如何使用「ggplot2绘制进阶版的配对点图」,代码部分小编做了详细的注释,「数据+代码已经上传2023VIP群,加群的观众老爷请自行下载」 加入会员解锁更多精彩内容
❞
❝有需要学习个性化数据可视化的朋友,欢迎到小编的「淘宝店铺」 「R语言数据分析指南」购买「2023年度会员」
❞初始价格99元,内容主要包括各种「高分论文的图表分析复现以及一些个性化图表的绘制」均包含数据+代码;按照往年数据小编年产出约在150+以上
购买后微信发小编订单截图即邀请进新的会员交流群,小编的文档为按年售卖,只包含当年度的「除系列课程外」的文档,有需要往年文档的朋友也可下单购买,需要了解更多信息的朋友欢迎交流咨询,「添加小编微信请备注,以提高沟通效率」
载入所需的包
library(tidyverse)
library(ggtext)
library(glue)
读入数据文件
df <- read_tsv("data.xls")
设定需要突出显示的国家
country <- c("Canada", "Germany",
"Indonesia", "Australia ", "United Kingdom",
"Brazil", "Greece","Singapore", "Myanmar")
数据清洗
data <- df %>%
# 选择1995年和最新年份的数据
filter(Year == 1995 | Year == max(Year)) %>%
# 对同一国家的多年数据进行筛选,确保只有两条数据
group_by(Entity) %>%
filter(n() == 2) %>%
# 找出每个国家最大的值出现在哪一年,并确定趋势(增加或减少)
mutate(max_value_year = which.max(Hours),
trend = ifelse(max_value_year == 1, "decrease", "increase")) %>%
ungroup() %>%
# 根据需要突出显示的国家和同一国家两年数据的趋势,给每个国家打上标签
mutate(highlight = case_when(
!(Entity %in% country) ~ "other",
Entity %in% c("Myanmar", "Singapore") ~ "same",
TRUE ~ trend))
❝这行代码在 mutate() 函数中创建了一个新变量 highlight,它根据不同的条件赋予不同的值。
❞
根据不同的条件,highlight 可以取以下三个值之一:
"other" 表示这个国家不需要突出显示。
"same" 表示这个国家虽然需要突出显示,但是在最近的一年与 1995 年的工作时长数据没有变化。
"increase" 或 "decrease" 表示这个国家需要突出显示,并且在最近的一年与 1995 年的工作时长数据有所增加或减少。
数据可视化
data %>% ggplot(aes(factor(Year), Hours, group = Entity, color = highlight)) +
geom_line(aes(size = ifelse(highlight == "other", 0.1, 0.7))) + # 画出线图
geom_point() + # 画出散点图
# 添加标签,使用ggrepel包来避免标签重叠
ggrepel::geom_text_repel(data = . %>% filter(highlight != "other"),
aes(x = ifelse(Year == min(Year), 1 - 0.5, 2 + 0.5),
label = glue::glue("{Entity} ({scales::number(Hours, accuracy = 1)})"),
hjust = ifelse(Year == min(Year),1,0)),
size = 2.5, nudge_x =0, direction = "y",segment.size = 0) +
scale_x_discrete(position = "top") + # 调整x轴的位置和大小
scale_size_identity() +
coord_cartesian(clip = "off") +
# 设定颜色
scale_color_manual(values = c("other" = "grey",
"decrease" = "#205FA7", "increase" = "#E9972A",
"same" = colorspace::darken("#46732EFF"))) +
guides(col = "none") + # 不显示颜色标尺
# 设定主题
theme_minimal(base_size = 8) +
theme (
plot.background = element_rect(color = NA, fill = "white"),
panel.grid = element_blank(),
panel.grid.major.x = element_line(color = "#ECEEF2", size = 6),
axis.title = element_blank(),
axis.text.x = element_text(size = 12, face = "bold", color = "grey38"),
axis.text.y = element_blank(),
plot.margin = margin(t = 6, l = 16, r = 16, b = 4))
小编微信

关注下方公众号下回更新不迷路
往期精彩内容
[会员专享]ggraph轻松绘制网络图
ggplot2优雅绘制轨迹趋势散点
[会员专享]ggplot2构建图层注释拟合曲线
[会员专享] ggplot2绘制局部放大柱状图
nature microbiology图表复现之简洁版热图
[会员专享] ggplot2绘制个性化注释哑铃图
reactablefmtr包绘制高端交互式表格
[会员专享] nature communications图表复现之个性化地图绘制
[会员专享] R优雅绘制组合版circos图
[会员专享] nature biotechnology图表复现高端个性化组合图

