❝本节来介绍如何使用「ggplot2结合ggfx」来绘制发光点图,下面小编通过一个案例来进行展示,图形仅供展示用,希望各位观众老爷能够喜欢。❞
加载R包
代码语言:javascript
复制library(tidyverse)
library(janitor)
library(ggtext)
library(ggforce)
library(ggfx)
导入数据
代码语言:javascript
复制df <- read_tsv("data.tsv")
定义调色板
代码语言:javascript
复制pal <- c('#ecbf3d', '#f0cc46', '#f5e355', '#fdf56d', '#fdffbe', '#ffffff')
数据清洗
代码语言:javascript
复制cities <- c("Paris", "Berlin", "London", "Sydney", "New York")
df_time <- df %>%
group_by(zone) %>% # 按时区分组
slice_max(end) %>% # 选择每组的最大值
mutate(city = str_replace(str_extract(zone, "(?<=/)[^/]*$"), "_", " ")) %>% # 提取并替换城市名
filter(city %in% cities) %>% # 过滤出指定城市
mutate(
city = factor(city, levels = rev(cities)), # 将城市转换为因子变量
lab = paste0(city, "."), # 创建标签
offset = offset/3600, # 转换时区偏移量
offset_lab = ifelse(offset < 0, as.character(offset), paste0(" ", offset)) # 创建时区标签
) %>%
ungroup() # 取消分组
构建圆形数据框
代码语言:javascript
复制df_circle <- map_dfr(cities, ~{
tibble(x = 0,y = 0,
r = seq(1, 0.75, length = 10),
col = colorRampPalette(pal)(10),
city = .x)
}) %>%
mutate(city = factor(city, levels = rev(cities))) %>% # 将城市转换为因子变量
left_join(df_time %>% select(city, offset),by = "city") %>% # 左连接
mutate(y = as.numeric(city)) # 转换城市为数值型
数据可视化
代码语言:javascript
复制df_time %>% ggplot()
geom_text(aes(0, city, label = lab),size =5, colour = ifelse(df_time$dst,"#ecbf3d", "white"),
hjust = 0, fontface = "bold") # 添加城市标签
geom_text(aes(3.8, city, label = offset_lab), colour = "white", size = 4, fontface = "bold") # 添加时区标签
geom_segment(aes(x=4, xend = 8, y = city, yend = city), colour = "white") # 添加线段
with_inner_glow(
geom_circle(aes(x0 = offset/6 6, y0 = y, r = r/2, fill = col, group = city), df_circle, colour = NA),
colour = "grey20", expand = 2, sigma = 5) # 添加带内部发光的圆形
scale_fill_identity() # 使用原始填充色
coord_fixed() # 固定坐标轴
theme_void() # 使用空白主题
theme(plot.background = element_rect(fill ="grey20", colour = "grey20"), # 设置背景色
plot.margin = margin(b = 2, t = 5, r = 5, l = 5)) # 设置边距