r data.frame添加_R 语言中桑基图的一些画法。。。

欢迎收看今晚 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"))))
7190f640c83a983f193ae8240665eb11.png

使用 sankeywheel 绘制

介绍桑基图画法的教程当然首先要介绍我自己写的 R 包啦,我有一个 sankeywheel 包可以用来绘制桑基图,其实我在 探索微信好友数据 的那个教程里面已经介绍过了这个 R 包的使用,这里重复下:

library(sankeywheel)
df %>%
group_by(prov, gender) %>%
count() %>%
ungroup() -
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(Sankey diagram)是一种流程,用于表示流量、能量、材料等资源在系统内部的转移。在R语言,可以使用包ggplot2和ggalluvial来创建。 首先,我们需要安装并加载这两个包: ```r install.packages("ggplot2") install.packages("ggalluvial") library(ggplot2) library(ggalluvial) ``` 然后,我们可以使用以下代码创建一个简单的: ```r data <- data.frame(from = c("A", "A", "B", "B", "C"), to = c("B", "C", "C", "D", "D"), value = c(10, 20, 30, 40, 50)) ggplot(data, aes(axis1 = from, axis2 = to, y = value)) + geom_alluvium(aes(fill = from), width = 0.1) + geom_stratum(width = 1/8, fill = "grey", color = "black") + theme_void() ``` 这将创建一个包含三个节点的,其节点A、B和C之间的流量表示为从A到B、从A到C、从B到C、从B到D和从C到D的线。 我们还可以自定义的颜色、标签和样式。例如,以下代码创建一个包含四个节点的,其节点A、B、C和D之间的流量表示为从A到B、从A到C、从B到C、从B到D、从C到D和从C到A的线: ```r data <- data.frame(from = c("A", "A", "B", "B", "C", "C"), to = c("B", "C", "C", "D", "D", "A"), value = c(10, 20, 30, 40, 50, 60)) ggplot(data, aes(axis1 = from, axis2 = to, y = value)) + geom_alluvium(aes(fill = from), width = 0.1) + geom_stratum(width = 1/8, fill = "grey", color = "black") + scale_fill_manual(values = c("#E69F00", "#56B4E9", "#009E73", "#F0E442")) + ggtitle("Customized Sankey Diagram") + theme_void() + theme(plot.title = element_text(hjust = 0.5, size = 20, face = "bold"), axis.text.y = element_text(size = 16), axis.text.x = element_text(size = 16), axis.title = element_blank()) ``` 此代码将节点A、B、C和D分别着色为橙色、蓝色、绿色和黄色,并添加了标题和自定义字体大小和样式。 总之,R语言的ggplot2和ggalluvial包提供了创建自定义的灵活和简单的方法,可以用于可视化各种类型的数据流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值