欢迎关注R语言数据分析指南
本节来介绍如何使用ggplot2包绘制樱花图,通过下面一个小栗子来进行系统展示,废话不多说先来看一下最终的结果
安装并加载R包
package.list=c("tidyverse","ggforce","glue","ggtext")
for (package in package.list) {
if (!require(package,character.only=T, quietly=T)) {
install.packages(package)
library(package, character.only=T)
}
}
读入数据
df <- readr::read_csv("data.txt")
data <- df %>%
filter(state %in% state.abb) %>%
count(incident_month, incident_year, species_id, species) %>%
arrange(species_id, species, incident_year, incident_month) %>%
group_by(species, species_id, incident_year) %>%
mutate(percent = n/sum(n)) %>%
mutate(percent = ifelse(is.nan(percent), 0, percent)) %>%
mutate(angle = 90 - (incident_month-1)*30,
angle = ifelse(angle < 0, 360 + angle, angle),
radians = angle*pi/180,
x0 = percent * cos(radians),
y0 = percent * sin(radians))
定义函数绘制线条
axes_lines <- function(radius) {
tibble(segment = 1:6,
x = c(0, radius*cos(pi/3), radius*cos(pi/6), radius,radius*cos(pi/6), radius*cos(pi/3)),
xend = c(0, -radius*cos(pi/3), -radius*cos(pi/6), -radius, -radius*cos(pi/6), -radius*cos(pi/3)),
y = c(radius, radius*sin(pi/3), radius*sin(pi/6), 0, -radius*sin(pi/6), -radius*sin(pi/3)),
yend = c(-radius, -radius*sin(pi/3), -radius*sin(pi/6), 0, radius*sin(pi/6), radius*sin(pi/3)))
}
定义函数添加标签
axes_labels <- function(radius) {
tibble(month = 1:12,
label = month.abb[month],
x = c(axes_lines(radius)$x, axes_lines(radius)$xend),
y = c(axes_lines(radius)$y, axes_lines(radius)$yend)) }
数据可视化
data %>%
filter(species == "Crows") %>%
ggplot(aes(x = incident_month, y = percent, group = incident_year,
color = incident_year, fill = incident_year)) +
geom_segment(data = axes_lines(2), aes(x = x, xend = xend, y = y , yend = yend),
size = 0.1, color = "#cccccc", inherit.aes = FALSE) +
geom_circle(aes(x0 = 0, y0 = 0, r = 2), inherit.aes = FALSE, size = 0.1, color = "#cccccc") +
geom_circle(aes(x0 = 0, y0 = 0, r = 1), inherit.aes = FALSE, size = 0.1, color = "#cccccc") +
geom_ellipse(aes(x0 = x0, y0 = y0, a = percent, b = percent/2, angle = radians,
fill = incident_year), alpha = 0.5, size = 0.1)+
geom_text(data = filter(axes_labels(2.15), !label %in% c("Mar", "Sep")),
aes(x = x, y = y, label = label), inherit.aes = FALSE) +
scale_color_viridis_c() +
scale_fill_viridis_c() +
labs(x = NULL, y = NULL) +
coord_fixed(clip = "off") +
theme_void()+
theme(axis.text.x = element_blank(),
axis.text.y = element_blank(),
legend.position = "none")
通过上面一连串的代码可以看到最终的图形还是很美观的,喜欢的小伙伴欢迎关注公众号R语言数据分析指南后台回复20211130获取本文代码
QQ交流群
作者微信

关注下方公众号下回更新不迷路,如需要加入微信交流群,请在菜单栏处添加作者微信,备注单位+方向+姓名即可邀您进群;公众号主要分享生物信息学与R语言数据可视化的经典案例,希望对大家有所帮助
往期推荐

