(在模仿中精进数据可视化09)近期基金涨幅排行可视化
本文完整代码及数据已上传至我的
Github
仓库https://github.com/CNFeffery/FefferyViz
1 简介
最近几个月一是工作繁忙,二是将业余的注意力多数放在Dash
系列教程的撰写上,因此费老师我已经很久很久没有更新过在模仿中精进数据可视化系列文章了😶,今天继续第9期~
我们今天要绘制的数据可视化作品,灵感来源于DT财经某篇文章的一幅插图,原图如下:

这幅图其实可以说是柱状蝴蝶图的一种变种,用极坐标系代替平面坐标系,左上和右下彼此分离相对的半圆均以逆时针方向对数据排行进行带色彩映射的可视化,非常的美观,容易给人留下深刻的印象。
而今天的文章我们换个数据源,基于近3个月股票型以及债券型基金各自涨幅的前十名数据(数据来源东方财富网),来基于matplotlib
使用同样的方式进行表达。
2 复刻过程
2.1 拆解主要视觉元素#
其实这幅作品绘制起来主要的难度在于极坐标系下很多matplotlib
涉及到的API
都比较冷门,如果是对matplotlib
不太熟悉的朋友可能会感觉无从下手。
按照惯例,我们先来“肢解”一下这幅图的主要构图元素:
- 分离的两部分半圆区域
这幅作品中的主体区域当数左上及右下区域对应的两个半圆,它们之间是存在一定宽度的间隔,因此我们需要创建两个极坐标系子图,并调整位置,形成彼此相对的样子,我们可以先使用plt.subplots()
开辟画布,再针对画布对应Figure
对象执行add_axes()
方法调整位置,插入polar=True
的极坐标子图。
再配合set_xlim()
、set_ylim()
,以及极坐标系子图专有的set_thetagrids()
、set_rgrids
和set_theta_offset()
来完成限定圆形显示的角度范围、半径范围,自定义网格线以及修改旋转角度等作用,这一步后形成图2:

- 利用fill_between()来映射数据
接下来我们就需要将数据映射到极坐标系中,可以选择柱状图或面积填充的方式进行绘制,我这里为了操作自由度更高,选择配合fill_between()
来基于面积填充进行映射(调色盘方案基于palettable
),因为是极坐标系,所以对应传入的参数变成了角度范围和半径序列,配合一些额外线条和白色填充后,效果如下:

- 文字标注
因为我们的基金数据中,基金的名称普遍较长,且我还希望标注出每个扇形区域对应的涨幅数额,因此我使用环绕型的文字标注方式,基于matplotlib
的text()
方法,结合每个扇形区域的对应角度范围,在循环过程中推导出标注文字的旋转角度,这一步后得到的效果如下:

这一步需要注意的是,matplotlib
中text()
在旋转时,其针对水平和竖直方向对齐方式,在极坐标系中有些要注意的地方,我在上图中设置了参数rotation_mode='anchor'
,它帮助我们先旋转文字,再对齐,如果不加这个参数,会先对齐再旋转,得到的效果会很混乱:

2.2 完成复刻#
在上述拆解的基础上,加上一些对细节的补充,便得到下面的作品:

完整数据及代码你可以在文章开头的Github
仓库中对应找到。
以上就是本文的全部内容,欢迎在评论区与我进行交流讨论~
作者:Feffery
出处:https://www.cnblogs.com/feffery/p/14934738.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?