折线图的奇妙变奏:四种创意可视化方法

news/2026/1/24 18:16:23/文章来源:https://www.cnblogs.com/wang_yb/p/19527255

想象一下折线图就像一条普通的公路,它能带我们从A点到达B点。

但有时我们需要更特别的路线:环岛盘山公路波浪形赛道螺旋上升的通道。

在数据可视化中,标准的折线图有时无法充分展示数据的特性,这时我们就需要一些创意变种。

今天将介绍四种特别的折线图变体,它们各有所长,能让你的数据故事更加生动。

1. 圆形折线图:时间的轮回

如果把普通的折线图首尾相连,放在圆形坐标系中,就得到了圆形折线图。

它特别适合展示周期性数据,比如一天24小时的温度变化、一周七天的销售数据,或者一年四季的气候模式。

它的实现原理是:使用极坐标系统,将角度代表时间或类别,半径代表数值大小。

matplotlib中,只需要创建一个极坐标子图,然后像普通折线图一样绘制即可。

# 圆形折线图
# 数据准备
hours = np.linspace(0, 2 * np.pi, 24, endpoint=False)
values = [] # ....
# 闭合数据
values_cycle = np.concatenate((values, [values[0]]))
hours_cycle = np.concatenate((hours, [hours[0]]))
hour_labels = [f"{h}点" for h in range(24)]fig = plt.figure(figsize=(14, 6))# --- 左图:普通折线图 ---
ax1 = fig.add_subplot(121)
ax1.plot(range(24), values, marker="o", color="#FF6B6B")
# 省略...# --- 右图:圆形折线图 ---
ax2 = fig.add_subplot(122, projection="polar")
ax2.plot(hours_cycle, values_cycle, linewidth=2, color="#FF6B6B")
# 省略...plt.show()

圆形折线图在这种场景下的优势在于 周期性的闭环感

  • 左图(普通): 像把这一天的时间切断了,23:00 和 00:00 分隔在两端,看不出它们其实紧挨着。
  • 右图(圆形): 完美闭合。你能直观地感受到“深夜”是一个连续的时间段。

2. 斜率图:变化的快照

想象一下比较两个人从起点到终点的跑步速度。

斜率图就像两张快照:一张在起点,一张在终点,中间用直线连接。

线的斜率代表了变化的速率,陡峭的上坡表示大幅增长,平缓的线表示变化不大,下坡则表示下降。

它的实现原理:通常在两侧显示两个时间点或两种状态的数据,然后用直线连接对应的数据点。

线的斜率直观展示了变化的大小和方向

# 斜率图
# 数据
depts = ['销售部', '人事部', '技术部', '研发部', '市场部']
score_before = [65, 70, 88, 85, 60]
score_after = [85, 68, 92, 80, 90]fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))# --- 左图:普通折线图 ---
x = [1, 2] # 代表前后两个时间点
for i in range(len(depts)):ax1.plot(x, [score_before[i], score_after[i]], marker='o', label=depts[i])
# 省略 ...# --- 右图:斜率图 ---
for i in range(len(depts)):color = 'green' if score_after[i] > score_before[i] else 'red'# 绘制线条ax2.plot([0, 1], [score_before[i], score_after[i]], color=color, marker='o', linewidth=2)# 直接在点旁边标注文字,去除图例查找的负担ax2.text(-0.05, score_before[i], f"{depts[i]} {score_before[i]}", ha='right', va='center')ax2.text(1.05, score_after[i], f"{score_after[i]}", ha='left', va='center')# 省略 ...plt.tight_layout()
plt.show()

斜率图在这种场景下的优势在于 极简的变化趋势

  • 左图(普通): 虽然也能看,但在坐标轴的干扰下,你需要盯着读数看。
  • 右图(斜率): 去掉了多余的刻度线,只保留首尾。线条越陡峭,代表变化越剧烈。这就像是从“阅读说明书”变成了“看红绿灯”,一目了然。

3. 凹凸图:排名的舞蹈

想象一下赛跑中的名次变化:起跑时A领先,中途B反超,最后C冲刺夺冠。

凹凸图就像记录这场比赛的名次变化表,每个时间点谁在前谁在后一目了然。

它的实现原理:通常展示多个项目在不同时间点的排名变化。

每个项目有一条线,线的上下位置代表排名高低。由于排名是相对的,所以这些线总会交叉,形成有趣的波浪形。

# 凹凸图
years = [2019, 2020, 2021, 2022, 2023]
# 排名数据
ranks = {'品牌A': [1, 1, 2, 3, 4],'品牌B': [4, 3, 1, 1, 2],'品牌C': [2, 4, 3, 2, 1],'品牌D': [3, 2, 4, 4, 3]
}
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))# --- 左图:普通折线图 (模拟数值非常接近的情况) ---
# 假设排名对应的数值很接近,很难看清
values_simulated = {'品牌A': [30, 31, 25, 20, 15],'品牌B': [10, 15, 30, 32, 28],'品牌C': [25, 12, 22, 28, 35],'品牌D': [20, 22, 18, 15, 20]
}for brand, val_list in values_simulated.items():ax1.plot(years, val_list, marker='o', label=brand)# 省略 ...# --- 右图:凹凸图 ---
for idx, (brand, rank_list) in enumerate(ranks.items()):ax2.plot(years, rank_list, marker='o', markersize=15, linewidth=4, label=brand, color=colors[idx])# 在圆点中写上名次for x, y in zip(years, rank_list):ax2.text(x, y, str(y), color='white', ha='center', va='center', fontweight='bold')ax2.invert_yaxis() # 关键:倒转Y轴,让第1名在最上面
# 省略 ...plt.tight_layout()
plt.show()

凹凸图在这种场景下的优势在于 排名的更替

  • 左图(普通): 我们通常画的是“数值”。如果四个品牌的市场份额很接近(比如20%和21%),线条会粘连在一起,很难看清谁第一谁第二。
  • 右图(凹凸): Y轴不再是数值,而是“名次”。这里将排名均匀拉开,你可以清晰地看到品牌C是如何像黑马一样从最后一名杀到第一名的。

4. 周期图:模式的放大镜

想象一下观察一年的温度变化。

普通折线图会显示一条有365个点的波浪线,周期图则把这365天分成12个月,把每个月的31天叠加在一起比较,就像把一年的温度曲线切成12段,然后并排放在一起。

它的实现原理:将时间序列数据按照周期(天、周、月、年等)切分,然后将每个周期重叠绘制。

这样可以直观比较不同周期内的模式是否相似,以及每个周期相对于整体的表现。

# 周期图
months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
# 模拟长数据
sales_2021 = [20, 25, 35, 50, 80, 100, 110, 105, 70, 50, 30, 25]
sales_2022 = [22, 28, 40, 55, 85, 105, 115, 100, 75, 55, 35, 28]
sales_2023 = [25, 30, 45, 60, 95, 120, 130, 115, 80, 60, 40, 35]fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))# --- 左图:普通折线图 (线性时间轴) ---
# 把所有数据拼成一条长线
all_sales = sales_2021 + sales_2022 + sales_2023
all_months_idx = range(len(all_sales))ax1.plot(all_months_idx, all_sales, color='#3498db', linewidth=2)
# 省略 ...# --- 右图:周期图 (叠加时间轴) ---
ax2.plot(months, sales_2021, marker='.', label='2021年', color='lightgrey', linewidth=2, linestyle='--')
ax2.plot(months, sales_2022, marker='.', label='2022年', color='grey', linewidth=2, linestyle='--')
ax2.plot(months, sales_2023, marker='o', label='2023年', color='#3498db', linewidth=3)
# 省略 ...plt.tight_layout()
plt.show()

周期图在这种场景下的优势在于 季节性模式的识别

  • 左图(普通): 一条长线连绵不断。想要对比2021年7月和2023年7月的数据,眼睛需要在图表左右两端来回横跳,非常累。
  • 右图(周期): 就像把每年的数据“叠”在了一起。你可以直接看到,无论哪一年,7月都是最高峰,而12月都是低谷。规律一目了然。

5. 总结

每种折线图变体都有其独特的价值:

  • 圆形折线图:适合展示周期性数据,首尾相接的设计强调循环
  • 斜率图:适合比较两个时间点的变化,直观展示变化幅度
  • 凹凸图:适合展示排名或相对位置的变化,竞争关系一目了然
  • 周期图:适合比较多个周期的模式,发现季节性规律

实际情况下,选择哪种变体取决于你的数据特点和想要传达的信息。

关键是要记住:可视化不是为了炫技,而是为了更好地讲述数据故事。下次当我们面对数据时,不妨思考一下,哪种"变形"的折线图能让你的故事更加动人。

完整的代码共享在:折线图的4个变种.ipynb (访问密码: 6872)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1210815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Reactor线程池切换publishOn与subscribeOn

在 Reactor(Project Reactor)中,publishOn 和 subscribeOn 是用于 切换执行线程(调度器) 的两个操作符,但它们的行为和用途 截然不同。下面是它们的详细区别与使用说明。 🧠 一句话理解 **subs…

本地win系统和vmware 虚拟机 ubuntu实现文件共享

在实际的工作开发中,经常会运用到虚拟机的情况。当然,随着win系统版本地提升,从win10开始,本身win系统也自带了虚拟机的功能。但有一些老式的机子,是不支持的。为此,我就以 vmware 安装 ubuntu 来实现它与本…

CDC虚拟串口与硬件串口传输速度的对比测试

CDC串口是指通过USB接口模拟传统串行通信端口(COM口)的一种技术,其全称为‌通信设备类(Communication Device Class)。而硬件串口是一种传统的串口。 USB CDC串口可支持最高12Mbps的传输速度(USB 2.0),而硬件的…

数据结构:加权图 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Xcode中iOS资源混淆问题与解决方案详解

iOS 资源混淆 概述 XCode项目中的文件夹分成两类: group 和 directory reference, 分别是虚结构和实结构. 黄色的 group 是默认的格式, 它的结构和磁盘上的文件夹毫无关系, 仅仅表示资源的逻辑组织结构, 这在管理源文件是非常方便. 同一段代码可以被很多项目使用, 也可能只使…

导师推荐2026 TOP10 AI论文软件:本科生毕业论文写作全解析

导师推荐2026 TOP10 AI论文软件:本科生毕业论文写作全解析 2026年AI论文写作工具测评:为何需要一份权威榜单? 随着人工智能技术的不断进步,越来越多的本科生开始依赖AI论文软件来提升写作效率与质量。然而,面对市场上…

2026年豆包优化工具选型:从技术底层到效果落地5大核心评估

2026年,当企业把AI搜索作为流量增长的“第二曲线”,豆包凭借专业场景语义理解和高精准用户匹配的优势,成为医疗、宠物服务、新能源等垂直行业的“流量金矿”。但很多企业试过工具后发现:内容总被判定“不相关”、排名上去了但询盘…

2026年1月DeepSeek优化服务商口碑TOP10:从技术到效果转化的选型

2026年,生成式引擎优化(GEO)行业迎来规模化发展机遇。据《2025中国AI商业服务白皮书》数据显示,GEO市场规模已突破128亿元,近三年复合增长率达到41.7%。《2024生成式AI搜索生态研究报告》指出,随着AI搜索技…

Git代码规范

分支命名分支与环境对应关系( 1 ) type(必须) : commit 的类别,只允许使用下面几个标识:常用的提交类型包括提交类型描述示例feat新功能增加(feature)feat: add user login featurefix修复BUGfix: correct …

亲测好用10个AI论文网站,继续教育学生轻松搞定毕业论文!

亲测好用10个AI论文网站,继续教育学生轻松搞定毕业论文! AI 工具让论文写作不再难 在当前的学术环境中,越来越多的继续教育学生开始借助 AI 工具来提升论文写作效率。尤其是 AI 降重工具的出现,不仅有效降低了 AIGC 率&#xff…

37、SQL的Explain

项目场景: SQL的Explain explain(SQL 优化工具标准)问题描述 今天下雨,小明去上班,之前维护的SQL,运行了一段时间,然后下午就 报错了~~~原因分析:解决方案:使用explain&a…

2026年主流GEO公司(服务商)选型与技术方案全景解析

声明:AI平台无官方广告,企业可通过GEO(生成式引擎优化)方式,使品牌信息自然融入AI生成内容。中国信通院数据显示,2026年国内GEO行业市场规模将增至286亿元,增速领跑AI营销赛道,超三分之一网页内容将专为AI搜索…

sql存储

1、查看已经创建的存储结构 格式:show create procedure 存储名; show create procedure c1; 2、查看所有已经创建好的存储 show PROCEDURE status ; 3、指定数据库查询存储 格式: show PROCEDURE statu…

c++实现交互式地震层位解释的软件

基于您的查询“c++实现交互式地震层位解释的软件”,结合当前的搜索结果,我为您提供以下信息和建议。1. 现有资源与工具分析根据搜索结果,目前并没有一个现成的、开源的、完整的“交互式地震层位解释软件”可以直接下…

JS DOM 操作与性能优化实战指南:构建高效可交互的页面结构 - 实践

JS DOM 操作与性能优化实战指南:构建高效可交互的页面结构 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

为什么要引入右值引用

关于c++11右值相关文章在网上已经有非常多深度好文,如果你还是看不懂,那么希望这篇文章能帮到你。在 C++ 旧时代,经常面临“对象拷贝”带来的性能瓶颈问题。 来先看一个类,这个类内部维护了一个很大的堆内存 class…

2026防撞车租赁推荐:大黄蜂机电设备有限公司,全国400城覆盖,45000余台设备供应

在建筑安全设备租赁领域,防撞车租赁作为道路施工、桥梁建设等场景的核心保障设备,其需求量随基建规模扩大持续攀升。据行业数据显示,2025年全国防撞车租赁市场规模突破120亿元,年复合增长率达18.7%,其中租赁模式占…

2026年满意度调查服务推荐:深圳神秘顾客市场调查有限公司,专业第三方满意度调研实力之选

在服务行业与企业管理领域,满意度调查已成为衡量服务质量、优化客户体验的核心工具。无论是企业提升服务水平,还是机构优化管理流程,精准的满意度数据都能为决策提供关键依据。深圳神秘顾客市场调查有限公司(简称S…

2026年防水透气阀专业厂家推荐:昆山艾尤诺新材料科技,全系产品覆盖多领域应用

在工业材料领域,防水透气阀作为关键功能性组件,广泛应用于电子、汽车、包装、医疗等多个行业。其核心功能是通过微孔结构实现气体交换,同时阻隔液体渗透,为设备提供可靠防护。据行业数据显示,2025年全球防水透气阀…

学霸同款10个一键生成论文工具,研究生高效写作必备!

学霸同款10个一键生成论文工具,研究生高效写作必备! AI 工具如何助力论文写作,提升效率与质量 在研究生阶段,论文写作是一项不可避免的任务,而随着人工智能技术的不断进步,AI 工具已经成为许多学生的得力…