大数跨境
0
0

ggplot2带你绘制美美的樱花图

ggplot2带你绘制美美的樱花图 R语言数据分析指南
2021-11-30
2
导读:欢迎关注R语言数据分析指南本节来介绍如何使用ggplot2包绘制樱花图,通过下面一个小栗子来进行系统展示,废

欢迎关注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语言数据可视化的经典案例,希望对大家有所帮助

往期推荐

手把手教你使用circlize绘制高端基因组

ggplot2绘制气泡热图

一文解决所有生信文章投稿问题

ggplot2优雅的批量绘制饼图

使用R语言制作令人惊艳的海报

gggibbous绘制迷你月球图版折线图

手把手带你绘制CNS级别的气泡图

ggplot2带你绘制质感美美的云雨图

箱线图|小提琴图,你需要的他都有

如何绘制出美丽的基因密度图

手把手教你绘制基因组图

手把手教你配置Linux系统(Ubuntu 下)

手把手教你配置Linux系统(Ubuntu 中)

手把手教你配置Linux系统(Ubuntu 上)

Microsoft Edge一款你值得使用的浏览器


【声明】内容源于网络
0
0
R语言数据分析指南
R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
内容 1180
粉丝 0
R语言数据分析指南 R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
总阅读497
粉丝0
内容1.2k