之所以会想到写关于桑基图的内容是因为最近工作需要,研究了下桑基图,发现网络上和桑基图相关的真实可用的资料少之又少,所以决定出这篇博客,讲讲如何用R语言绘制桑基图。

什么是桑基图?

它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。因1898年Matthew Henry Phineas Riall Sankey绘制的“蒸汽机的能源效率图”而闻名,此后便以其名字命名为“桑基图”。

原本是用在工程学上的图形,但是因为用来表述各个大类别间的区别与联系很直观,所以我拿来描述区域与门店间销售的区别与联系。

怎么画桑基图?

R语言里面主要用networkD3包绘制,核心是sankeynetwork()函数,函数细节

sankeyNetwork(Links, Nodes, Source, Target, Value, NodeID, NodeGroup = NodeID,
  LinkGroup = NULL, units = "",
  colourScale = JS("d3.scaleOrdinal(d3.schemeCategory20);"), fontSize = 7,
  fontFamily = NULL, nodeWidth = 15, nodePadding = 10, margin = NULL,
  height = NULL, width = NULL, iterations = 32, sinksRight = TRUE)

首先载入包,读入基础数据,数据集包含5个区域,每个区域中有四种类型的门店,我们要观察每个区域中各个类型门店的销售情况

> library(networkD3)
> sankey<-read.csv("mydata.csv",header=TRUE)
> str(sankey)
'data.frame': 20 obs. of  3 variables:$ 区域: Factor w/ 5 levels "区域A","区域B",..: 1 1 1 1 2 2 2 2 3 3 ...$ 门店: Factor w/ 4 levels "门店1","门店2",..: 1 2 3 4 1 2 3 4 1 2 ...$ 销量: int  100 300 140 20 1640 800 440 190 460 460 ...

接下来准备绘制桑基图,桑基图的数据结构有三列,第一列起点,第二列终点,第三列权重,我们接下来所有的操作都是为了构造出符合要求的数据框:

> network <- sankey[,1:3]#生成一张新表,命名network,取出需要的列数据
> colnames(network) <- c("区域", "门店", "销量")#给新表各列命名
> factor_list <- sort(unique(c(levels(network$区域), levels(network$门店))))#列出起点、终点的列名以及各列具体类别名称
> num_list <- 0:(length(factor_list)-1)#识别出图的节点长度,因为从0开始,所以最终要减1
> levels(network$区域) <- num_list[factor_list %in% levels(network$区域)]#识别各区域节点数
> levels(network$门店) <- num_list[factor_list %in% levels(network$门店)]#识别各门店节点数
> network$区域 <- as.numeric(as.character(network$区域))#因子型数据转为数据型
> network$门店 <- as.numeric(as.character(network$门店))
> attribute <- data.frame(name=c(factor_list))#构造数据框,命名attribute,包含各级因子名称

绘制桑基图,使用sankeynetwork函数,数据集使用network数据集,节点根据factor_list得到,起点是区域,终点是门店,对应值是销量

> sankeyNetwork(Links = network, Nodes = attribute,
+               Source = "区域", Target = "门店",
+               Value = "销量", NodeID = "name", units = "TWh",
+               fontSize= 12, nodeWidth = 30)

最终画出来的图是这样:

观察这幅图,可以看到区域中区域B销量最大,门店中门店1这种类型的门店销量最大,各个类型门店的主要销售都是来自区域B,区域C的主要销售集中在门店1和2,同理区域E,区域A则是最大销售来自门店2,等等,通过仔细观察,可以得到不少信息,桑基图绘制目的就是让各类别间的区别和联系更加直观展现出来。今天的分享到此结束,下次再见!

R画图实战之——桑基图相关推荐

  1. 初学小白如何用R语言绘制环状桑基图

    最近写论文时看到大佬制作的环状桑基图很是心动: 但使用sankeywheel包无法输出,在网上找了教程试错多次,终于成功输出了,特此记录 1.加载包,用到highcharter包 library(sa ...

  2. 可视化应用实战案例:绘制交互式+pdf+png等多格式桑基图

    写在前面 桑基图挺好看的,用于观察不同门类之间的从属关系,并且绘制很漂亮的结构图,当然可以用于很多个地方.这里我们用微生物组数据的phyloseq对象,很快很方便的为大家构建一个桑基图.所以如果你有p ...

  3. 【Python 实战基础】如何绘制桑基图分析人口流动和年龄数据

    目录 一.实战场景 二.主要知识点 文件读写 基础语法 字符串处理 文件生成 数据构建 三.菜鸟实战 1.创建 python 文件 2.运行结果 一.实战场景 实战场景:如何绘制桑基图分析人口流动和年 ...

  4. python画图宽度_手把手教你用 Python 绘制酷炫的桑基图!

    作者 | 周志鹏 责编 | 郭   芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" ...... 笔者本没有 ...

  5. R绘图(5): 一文学会桑基图的画法

    桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图.它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源.材料成分.金融.生物信息等数据的可视化分 ...

  6. 使用R画桑基图(流程图)

    桑基图可以用来表示各个节点之间转换 在R中可以直接定义点点之间的关系后使用相应的package画桑基图: 方法一:   library(riverplot) # 构造连接节点的数据框 edges =  ...

  7. R语言多层桑基图_桑基图的绘制核心微生物组分类学及丰度展示

    为什么要用桑基图 桑基图 (Sankey diagram)是一种展现数据之间流动和相互关系的图像,类似于一种网络图,通过不同层级节点之间的连接以及连接边的宽度,展示数据之间的流动关系. 在微生物群落分 ...

  8. R语言多层桑基图_R语言可视化(二十三):桑基图绘制

    23. 桑基图绘制 清除当前环境中的变量 rm(list=ls()) 设置工作目录 setwd("C:/Users/Dell/Desktop/R_Plots/23sankey/") ...

  9. R语言多层桑基图_R语言轻松搞定用户路径桑基图

    用户路径分析,在互联网产品用户分析中是经常用到的,而使用最多的就是桑基图. 来自百度百科的定义:桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图.它是一种特定类型的流程图, ...

最新文章

  1. 吸顶wifi_分享 | 酒店WiFi网络的三种部署模式
  2. HTML基础部分(2)表格
  3. 原生JAVA的TCP/UDP编程
  4. 58同城买二手电脑的感想
  5. linux 系统监控、诊断工具之 IO wait
  6. SqlException (0x80131904): 将截断字符串或二进制数据。
  7. 1.3MB 的超轻YOLO算法!全平台通用,准确率接近YOLOv3,速度快上45%丨开源
  8. JAVA多态(向上转型)与RTTI向下转型
  9. 2019级C语言大作业 - 冷冻双侠
  10. C++数字与字符串的相互转换
  11. 关于浏览器内核的一些小知识,明明白白选浏览器
  12. linux网络标志有个问号,只有Linux中的问号
  13. 基于freeswitch1.6的IVR智能语音机器人交互逻辑lua脚本
  14. 快手适合在美妆行业做广告投放吗?快手广告如何计费?
  15. 2021-08-06,拼多多平台API,item_search - 根据关键词取商品列表
  16. 多线程使用jxcell 解密xls文件,xlxs文件不支持.暴力破解6位数的Excel密码,jxcell下载
  17. 单元测试基础上篇——几大常用框架对比
  18. 视频号:CTO要不要写代码?阿里员工究竟挣多少钱?
  19. spring boot 一个极简单的 demo 示例
  20. python程序设计从基础到开发课后题答案夏敏捷_[转载] python程序设计应用教程夏敏捷答案第八章_Python程序设计:从基础到开发...

热门文章

  1. LoadRunner教程09:LR自动关联
  2. 如何打印CSDN博客?将CSDN博客内容保存为PDF然后下载
  3. 「图像处理matlab函数」imclearborder与bwareaopen
  4. python程序开机自启动_python 设置开机启动脚本
  5. 联想全球实行两大品牌战略:Think和Idea
  6. FILETIME和LARGE_INTEGER
  7. java 中文替换_java字符串汉字替换成拼音
  8. 加州大学伯克利分校7门最受欢迎的MOOC课程
  9. 16.整理华为面经--1
  10. 7款高效、好用、免费的Mac工具!好用到炸系列