2026/5/18 14:50:59
网站建设
项目流程
网站域名出售,毕设网站,北京建站公司兴田德润信任,找人做短视频网站想象一下折线图就像一条普通的公路#xff0c;它能带我们从A点到达B点。
但有时我们需要更特别的路线#xff1a;环岛、盘山公路、波浪形赛道或螺旋上升的通道。
在数据可视化中#xff0c;标准的折线图有时无法充分展示数据的特性#xff0c;这时我们就需要一些创意变种。…想象一下折线图就像一条普通的公路它能带我们从A点到达B点。但有时我们需要更特别的路线环岛、盘山公路、波浪形赛道或螺旋上升的通道。在数据可视化中标准的折线图有时无法充分展示数据的特性这时我们就需要一些创意变种。今天将介绍四种特别的折线图变体它们各有所长能让你的数据故事更加生动。1. 圆形折线图时间的轮回如果把普通的折线图首尾相连放在圆形坐标系中就得到了圆形折线图。它特别适合展示周期性数据比如一天24小时的温度变化、一周七天的销售数据或者一年四季的气候模式。它的实现原理是使用极坐标系统将角度代表时间或类别半径代表数值大小。在matplotlib中只需要创建一个极坐标子图然后像普通折线图一样绘制即可。/* by yours.tools - online tools website : yours.tools/zh/formatperl.html */ # 圆形折线图 # 数据准备 hours np.linspace(0, 2 * np.pi, 24, endpointFalse) 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, markero, color#FF6B6B) # 省略... # --- 右图圆形折线图 --- ax2 fig.add_subplot(122, projectionpolar) ax2.plot(hours_cycle, values_cycle, linewidth2, color#FF6B6B) # 省略... plt.show()圆形折线图在这种场景下的优势在于周期性的闭环感。左图普通 像把这一天的时间切断了23:00 和 00:00 分隔在两端看不出它们其实紧挨着。右图圆形 完美闭合。你能直观地感受到“深夜”是一个连续的时间段。2. 斜率图变化的快照想象一下比较两个人从起点到终点的跑步速度。斜率图就像两张快照一张在起点一张在终点中间用直线连接。线的斜率代表了变化的速率陡峭的上坡表示大幅增长平缓的线表示变化不大下坡则表示下降。它的实现原理通常在两侧显示两个时间点或两种状态的数据然后用直线连接对应的数据点。线的斜率直观展示了变化的大小和方向。/* by yours.tools - online tools website : yours.tools/zh/formatperl.html */ # 斜率图 # 数据 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]], markero, labeldepts[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]], colorcolor, markero, linewidth2) # 直接在点旁边标注文字去除图例查找的负担 ax2.text(-0.05, score_before[i], f{depts[i]} {score_before[i]}, haright, vacenter) ax2.text(1.05, score_after[i], f{score_after[i]}, haleft, vacenter) # 省略 ... 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, markero, labelbrand) # 省略 ... # --- 右图凹凸图 --- for idx, (brand, rank_list) in enumerate(ranks.items()): ax2.plot(years, rank_list, markero, markersize15, linewidth4, labelbrand, colorcolors[idx]) # 在圆点中写上名次 for x, y in zip(years, rank_list): ax2.text(x, y, str(y), colorwhite, hacenter, vacenter, fontweightbold) 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, linewidth2) # 省略 ... # --- 右图周期图 (叠加时间轴) --- ax2.plot(months, sales_2021, marker., label2021年, colorlightgrey, linewidth2, linestyle--) ax2.plot(months, sales_2022, marker., label2022年, colorgrey, linewidth2, linestyle--) ax2.plot(months, sales_2023, markero, label2023年, color#3498db, linewidth3) # 省略 ... plt.tight_layout() plt.show()周期图在这种场景下的优势在于季节性模式的识别。左图普通 一条长线连绵不断。想要对比2021年7月和2023年7月的数据眼睛需要在图表左右两端来回横跳非常累。右图周期 就像把每年的数据“叠”在了一起。你可以直接看到无论哪一年7月都是最高峰而12月都是低谷。规律一目了然。5. 总结每种折线图变体都有其独特的价值圆形折线图适合展示周期性数据首尾相接的设计强调循环斜率图适合比较两个时间点的变化直观展示变化幅度凹凸图适合展示排名或相对位置的变化竞争关系一目了然周期图适合比较多个周期的模式发现季节性规律实际情况下选择哪种变体取决于你的数据特点和想要传达的信息。关键是要记住可视化不是为了炫技而是为了更好地讲述数据故事。下次当我们面对数据时不妨思考一下哪种变形的折线图能让你的故事更加动人。完整的代码共享在折线图的4个变种.ipynb (访问密码: 6872)