c语言画桑基图,桑基图绘制软件

本文目录一览:

R语言1—-桑基(sankey diagram)图的绘制–sankeyD3

实例分析:

### 安装与加载包  

install.packages(“devtools”)

devtools::install_github(“fbreitwieser/sankeyD3”)

library(sankeyD3)

第一个为链接数据框 links(起点、靶点、权重、链接的特征1、链接的特征1…..);

然后根据links构建第二个为节点数据框nodes(起点与靶点、点的特征1、点的特征……..)

nodes – data.frame(name=c(as.character(links$source), as.character(links$target)) %% unique())

然后基于nodes数据框构建links中节点的唯一标识符ID,而非根据节点的name

links$IDsource – match(links$source, nodes$name)-1 

links$IDtarget – match(links$target, nodes$name)-1

sankeyNetwork( Links = links, Nodes = nodes, Source = “IDsource”, Target = “IDtarget”,

              Value = “weight”, NodeID = “name”,nodeWidth =10,units = ‘TWh’,

              height=300,width=300,colourScale=JS(“d3.scaleOrdinal(d3.schemeCategory10);”),

              numberFormat=”.0f”,fontSize = 8)  

nodes$color-sample(c(“red”,”orange”,”blue”,”green”),nrow(nodes),replace=T)  #在这里进行随机自定义颜色,当然也可以按照自己的需求进行设置

sankeyNetwork(Links = links, Nodes = nodes,Source = “IDsource”, Target = “IDtarget”,

              Value = “weight”, NodeID = “name”,nodeWidth =10,units = ‘TWh’,

              height=300,width=300,numberFormat=”.0f”,fontSize = 8, NodeColor = “color” ) 

也可以根据节点自定义的分类对节点进行颜色的绘制

nodes$group-rep(“水果”,nrow(nodes))

nodes$group[nodes$name %in% c(“上海”,”深圳”,”北京”,”南京”)]-“城市”

nodes$group[nodes$name %in% c(“律师”,”老师”,”白领”,”公务员”,”记者”,”化妆师”)]-“职业”

sankeyNetwork(Links = links, Nodes = nodes,Source = “IDsource”, Target = “IDtarget”,

              Value = “weight”, NodeID = “name”,nodeWidth =10,units = ‘TWh’,

              numberFormat=”.0f”,fontSize = 8,height=300,width=300,

              NodeGroup=”group”,colourScale=JS(“d3.scaleOrdinal(d3.schemeCategory10);”) ) 

对于缎带的颜色设置同理也可以对其进行分组颜色设置(这里按照其统计量进行分组设置,当然也可以按照其他进行分组)

links$group-rep(“A”,nrow(links))

links$group[links$weight500 links$weight=100]-“B”

links$group[links$weight100]-“C”

sankeyNetwork(Links = links, Nodes = nodes,Source = “IDsource”, Target = “IDtarget”,

              Value = “weight”, NodeID = “name”,nodeWidth =10,units = ‘TWh’,

              numberFormat=”.0f”,fontSize = 8,height=300,width=300,

              NodeGroup=”group”, LinkGroup = “group”,

              colourScale=JS(“d3.scaleOrdinal(d3.schemeCategory10);”)) 

有时候想要缎带根据其宽度进行一定透明度的变化,可以使用 linkType=”path1″参数进行设置

install.packages(“webshot”)

library(webshot)

 if(!is_phantomjs_installed()){

  install_phantomjs()

}

library(webshot)

p-sankeyNetwork(Links = links, Nodes = nodes,Source = “IDsource”, Target = “IDtarget”,

              Value = “weight”, NodeID = “name”,nodeWidth =10,units = ‘TWh’,

              numberFormat=”.0f”,fontSize = 8,height=300,width=300,

              NodeGroup=”group”,LinkGroup = “group”,

              colourScale=JS(“d3.scaleOrdinal(d3.schemeCategory10);”))  

### 将结果存储PDF

saveNetwork(p,”sankey.html”)

webshot(“sankey.html” , “sankey.pdf”)

在线绘制桑基图

现在许多文章都利用桑基图来展示ceRNA网络、功能富集等图,也有很多R包专门可以用来画桑基图,不过我在这里发现ggplot2包非常强大,也可以画桑基图,现在来给大家介绍一下

首先加载需要的R包

###########加载

library(ggplot2)

library(ggalluvial)

library(RColorBrewer)

这里以miRNA-mRNA的关系为例,数据格式如下

##########整合

miRNA_mRNA$Freq=1#定义纵坐标,一般默认为1

miRNA_mRNA_long- to_lodes_form(miRNA_mRNA,

axes = 1:2,#将miRNA和mRNA分别编号

id = “Cohort”) #改为长数据便于画图

下面就可以开始画桑基图了,主要需要ggplot的geom_flow和geom_stratum两个函数

geom_flow–画流动图

我们看一下只画geom_flow的效果

###########geom_flow

ggplot(miRNA_mRNA_long,

aes(x =factor(x,level = c(“miRNA”,”SYMBOL”)),y=Freq,stratum = stratum, alluvium = Cohort,fill = stratum, label =stratum)) +

geom_flow( width = 1/3)+#画流动图

geom_text(stat =”stratum” , size =3) +#添加名字

scale_x_discrete(limits = c() )+#去掉横坐标轴

theme_bw()+#定义主题

theme(legend.position = “none”,

axis.title = element_blank(),

axis.text.y= element_blank(),

panel.grid.major = element_blank(),

panel.grid.minor  = element_blank(),

panel.border = element_blank())+

scale_fill_manual(values = colorRampPalette(brewer.pal(8, “Accent”))(20))#定义颜色

geom_flow–画流动图

我们看一下只画geom_stratum的效果

###########geom_stratum

ggplot(miRNA_mRNA_long,

aes(x =factor(x,level = c(“miRNA”,”SYMBOL”)),y=Freq,stratum = stratum, alluvium = Cohort,fill = stratum, label =stratum)) +

geom_stratum( width = 1/3,linetype=1,size=0.5,alpha =0.5,color = “black”) +#画冲击图

geom_text(stat =”stratum” , size =3) +#添加名字

scale_x_discrete(limits = c() )+#去掉横坐标轴

theme_bw()+#定义主题

theme(legend.position = “none”,

axis.title = element_blank(),

axis.text.y= element_blank(),

panel.grid.major = element_blank(),

panel.grid.minor  = element_blank(),

panel.border = element_blank())+

scale_fill_manual(values = colorRampPalette(brewer.pal(8, “Accent”))(20))#定义颜色

整合后

###########绘图

ggplot(miRNA_mRNA_long,

aes(x =factor(x,level = c(“miRNA”,”SYMBOL”)),y=Freq,stratum = stratum, alluvium = Cohort,fill = stratum, label =stratum)) +

geom_flow( width = 1/3)+#画流动图

geom_stratum( width = 1/3,linetype=1,size=0.5,alpha =0.5,color = “black”) +#画冲击图

geom_text(stat =”stratum” , size =3) +#添加名字

scale_x_discrete(limits = c() )+#去掉横坐标轴

theme_bw()+#定义主题

theme(legend.position = “none”,

axis.title = element_blank(),

axis.text.y= element_blank(),

panel.grid.major = element_blank(),

panel.grid.minor  = element_blank(),

panel.border = element_blank())+#去掉边界线

scale_fill_manual(values = colorRampPalette(brewer.pal(8, “Accent”))(20))#定义颜色

改变边框模式linetype

###########绘图

ggplot(miRNA_mRNA_long,

aes(x =factor(x,level = c(“miRNA”,”SYMBOL”)),y=Freq,stratum = stratum, alluvium = Cohort,fill = stratum, label =stratum)) +

geom_flow( width = 1/3)+#画流动图

geom_stratum( width = 1/3,linetype=0,size=0.5,alpha =0.5,color = “black”) +#画冲击图

geom_text(stat =”stratum” , size =3) +#添加名字

scale_x_discrete(limits = c() )+#去掉横坐标轴

theme_bw()+#定义主题

theme(legend.position = “none”,

axis.title = element_blank(),

axis.text.y= element_blank(),

panel.grid.major = element_blank(),

panel.grid.minor  = element_blank(),

panel.border = element_blank())+#去掉边界线

scale_fill_manual(values = colorRampPalette(brewer.pal(8, “Accent”))(20))#定义颜色

echarts图表——桑基图&路径图

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

桑基图最明显的特征就是,始末端的分支宽度总和相等,即所有主支宽度的总和应与所有分出去的分支宽度的总和相等,保持能量的平衡。

echarts中的路径图不是指学习路径图这种,而是基于地图。个人感觉更偏向道路规划图

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/193510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-01 15:01
下一篇 2024-12-01 15:01

相关推荐

  • Python脚本控制其他软件

    Python作为一种简单易学、功能强大的脚本语言,具有广泛的应用领域,在自动化测试、Web开发、数据挖掘等领域都得到了广泛的应用。其中,Python脚本控制其他软件也是Python…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • 量化交易软件哪个好?

    量化交易软件是为量化交易而设计的工具,能够用程序化方法对市场数据进行分析和交易决策。那么,哪个量化交易软件最好呢?下面从几个方面进行详细阐述。 一、交易功能 交易功能是量化交易软件…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29
  • OpenJudge答案1.6的C语言实现

    本文将从多个方面详细阐述OpenJudge答案1.6在C语言中的实现方法,帮助初学者更好地学习和理解。 一、需求概述 OpenJudge答案1.6的要求是,输入两个整数a和b,输出…

    编程 2025-04-29
  • Python按位运算符和C语言

    本文将从多个方面详细阐述Python按位运算符和C语言的相关内容,并给出相应的代码示例。 一、概述 Python是一种动态的、面向对象的编程语言,其按位运算符是用于按位操作的运算符…

    编程 2025-04-29
  • Python计算机二级刷题软件推荐

    Python作为编程语言的代表,已经在计算机学习和开发领域占据了重要角色。Python计算机二级是国家信息技术应用能力证书的一种,是计算机应用能力的重要评估标准。对于想要获取Pyt…

    编程 2025-04-29
  • 电脑如何下载ps软件

    如果您想在电脑上使用Photoshop,那么您需要下载安装该软件。下面是详细的步骤说明: 一、选择下载网站 目前市面上有很多下载网站都可以下载到Photoshop软件,比如Adob…

    编程 2025-04-29
  • Python语言由荷兰人为中心的全能编程开发工程师

    Python语言是一种高级语言,很多编程开发工程师都喜欢使用Python语言进行开发。Python语言的创始人是荷兰人Guido van Rossum,他在1989年圣诞节期间开始…

    编程 2025-04-28

发表回复

登录后才能评论