❝欢迎收看今晚 8:30 针对本文的直播讲解!
❞
- 我的直播间地址为:https://live.bilibili.com/21748016
「欢迎大家加入我的知识星球获取更多教程!关于如何加入,请阅读:欢迎加入 TidyFriday 的知识星球!」
知识星球上有个小伙伴非常想学习桑基图的画法,所以我今天就搜罗下 R 语言里面绘制桑基图的一些方法。最推荐的方法是使用 ggalluvial 绘制。其他的方法仅供参考,大家根据自己的喜好学习即可。当然绘制桑基图的方法还有很多,本文介绍的几种是我觉得比较好用的。
构造示例数据
首先我们需要构造一个示例数据集用于接下来的演示,这里我使用的是我的微信好友数据里面的省份、城市、性别变量。这个数据可以用下面的 Python 脚本获取:
import itchat
import pandas as pd
itchat.auto_login(hotReload = True)
friends = itchat.get_friends(update = True)
friends = pd.DataFrame(friends)
friends.to_csv("friends.csv")
如果你的微信无法通过这种方式导出好友数据,可以直接使用我的 friends.csv
数据集:
# 使用微信好友数据
library(hrbrthemes)
library(tidyverse)
library(ggplot2)
library(usethis)
library(magrittr) # 管道操作符
# 使用 Python 脚本 下载微信好友数据
df "friends.csv") %>%
mutate(
gender = case_when(
Sex == 0 ~ "未知",
Sex == 1 ~ "男孩",
Sex == 2 ~ "女孩"
)
) %>%
dplyr::filter(!is.na(City)) %>%
dplyr::filter(stringr::str_detect(City, "[一-龥]+")) %>%
select(prov = Province, city = City, gender)
df 是这样的:
❝是否记得这是我之前介绍的一个小技巧,为 datatable 表格控件添加下载按钮。
❞
df %>%
DT::datatable(
extensions = 'Buttons',
options = list(dom = 'Blfrtip',
buttons = c('copy', 'csv', 'excel',
'pdf', 'print'),
lengthMenu = list(c(10, 25, 50 ,-1),
c(10, 25, 50, "All"))))
使用 sankeywheel 绘制
介绍桑基图画法的教程当然首先要介绍我自己写的 R 包啦,我有一个 sankeywheel 包可以用来绘制桑基图,其实我在 探索微信好友数据 的那个教程里面已经介绍过了这个 R 包的使用,这里重复下:
library(sankeywheel)
df %>%
group_by(prov, gender) %>%
count() %>%
ungroup() -