这种河流图怎么绘制?一行代码搞定~~

2024-06-14 13:12

本文主要是介绍这种河流图怎么绘制?一行代码搞定~~,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

近日,有小伙伴私信我关于河流图(streamplot/streamgraph) 的绘制方法,大家知道小编我可是非常宠粉的哦,这就安排!!(有的小伙伴可能会问了,为啥老是绘制静态(不可交互)的图表呢,这里小编统一回复一下哈:交互式图表我们后面会专门出系列推文(Python居多哈),目前我们还是为了进行打好基础哈),好了,我们直接开始哈,内容主要如下:

  • 河流图简介

  • R-ggstream包绘制河流图

  • R-ggstream包实例演示

  • 更多详细的数据可视化教程,可订阅我们的店铺课程:

河流图简介

河流图(streamplot)是一种堆积面积图,主要用来表示事件或主题等在一段时间内的变化,通常以中心轴为中心显示区域,并且将边缘修圆以产生流畅的形状,也是使用较多的一种可视化图表,特别是在时间序列变化表示中。

R-ggstream包绘制河流图

在R绘图系统中,有很多包可以绘制该类图(streamgraph、ggstream),我们选择ggstream包进行绘制,原因在于其为ggplot2的拓展包,结合主题、颜色等包可实现高度的定制化操作。我们首先看一下这个包的情况:

  • 安装 由于现阶段还没发布到CRAN上,我们可以通过如下代码进行安装:

remotes::install_github("davidsjoberg/ggstream")
  • 河流图类别 安装完之后,我们看一下官网提供的样例,ggstream提供三种样式的河流图,分别如下:

    • Type: Mirror

      Mirror type example

    • Type: Ridge

      Ridge type example

    • Type: Proportional

      Proportional type example

  • 其他参数

「bw」: ggstream包还提供修改河流图细节修改的参数,其中较为重要的参数之一为bw。较低的bw会使曲线更加混乱,而较高的bw会消除某些变化。例子如下:

library(patchwork)base <- ggplot(blockbusters, aes(year, box_office, fill = genre)) + theme(legend.position = "none")(base +  geom_stream(bw = 0.5) + ggtitle("bw = 0.5")) /
(base +  geom_stream() + ggtitle("Default (bw = 0.75)")) /
(base +  geom_stream(bw = 1) + ggtitle("bw = 1"))

bw set example

bw set example

「Extra Span」 :作为另外一个较为重要的参数,extra_span 对最终的绘制结果,下面我们通过官网样例进行说明:

base <- ggplot(blockbusters, aes(year, box_office, fill = genre)) + theme(legend.position = "none") +xlim(1970, 2028)(base +  geom_stream() + ggtitle("Default")) /
(base +  geom_stream(extra_span = 0.001) + geom_stream(extra_span = 0.001, true_range = "none", alpha = .3) + ggtitle("extra_span = 0.001")) /
(base +  geom_stream(extra_span = .1) + geom_stream(extra_span = .1, true_range = "none", alpha = .3) + ggtitle("extra_span = .1")) /
(base +  geom_stream(extra_span = .2) + geom_stream(extra_span = .2, true_range = "none", alpha = .3) + ggtitle("extra_span = .2")) /
(base +  geom_stream(extra_span = .2, true_range = "none") + ggtitle("extra_span = .2 and true_range = \"none\""))

extra_span set example

extra_span set example

接下来,我们采用其他数据并将那些颜色等绘图属性的美化来探索河流图的魅力之处~~

R-ggstream包实例演示

这里我们直接给出代码和最终的可视化结果:

library(readxl)df<-read_excel("test_data.xlsx")library(ggstream)colors <- c("#FFBC42","#D81159","#8F2D56","#218380")stream_charts <- ggplot(data = df,aes(x = year,y = values,fill= type)) +geom_stream(bw = .8,extra_span = .1, true_range = "none",colour="gray40",size=.5) +scale_fill_manual(values = colors,name="") +hrbrthemes::theme_ipsum(base_family = "Roboto Condensed") +labs(x="",y="",title = "Example of <span style='color:#D20F26'>ggstream::geom_stream function</span>",subtitle = "processed charts with <span style='color:#1A73E8'>geom_stream()</span>",caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>") +theme(plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",face = 'bold',size = 22, margin = margin(t = 1, b = 12)),plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15,face = 'bold'),plot.caption = element_markdown(face = 'bold',size = 12),# 去除刻度线和网格线axis.text.x = element_blank(),axis.text.y = element_blank(),panel.grid.major = element_blank(),panel.grid.minor = element_blank(),panel.background = element_rect(fill="#FFF1E6"),panel.border = element_rect(fill = NA,colour = "#FFF1E6"),plot.background = element_rect(fill="#FFF1E6",colour = "#FFF1E6"),# 修改图例legend.position = "bottom",legend.text = element_text(size = 10, color = "black"),legend.key.height = unit(1, "lines"),legend.key.width = unit(2, "lines"))

「最终的可视化结果如下:」

河流图实例绘制

河流图实例绘制

总结

到这里,小编的这篇河流图的可视化绘制过程也就讲解完了,希望感兴趣的小伙伴可以获取样例数据进行练习哈~~

这篇关于这种河流图怎么绘制?一行代码搞定~~的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060499

相关文章

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st