时间趋势类相关的可视化图像

一、前言

  在数据驱动的时代,时间趋势类可视化图像成为分析数据变化的关键工具。它通过将数据按时间顺序展示,帮助我们清晰地识别增长、下降、周期性波动等模式,为预测未来趋势提供依据。从金融市场到气象学,时间趋势图在多个领域都有广泛应用。随着技术进步,时间趋势类图表的形式和功能不断丰富,从简单折线图到复杂交互式动态图,满足了多样化的分析需求。合理设计这些图表,可有效传达数据中的关键信息,使复杂数据更易理解。

二、地平线图

1.概念

  地平线图是一种数据可视化技术,以紧凑且分层的格式显示时间序列数据。它通过将数据划分为多个区域,并以不同的颜色和填充方式表示数据的正负变化,从而在有限的空间内展示丰富的信息。

2.特点

  • 空间效率高:地平线图通过折叠数据,将多个时间序列压缩到较小的空间内,适合在有限的显示区域展示大量数据
  • 信息密度高:尽管空间紧凑,但地平线图保留了数据的完整信息,用户可以通过颜色和填充区域轻松识别数据的变化
  • 易于比较:多个时间序列可以并排放置,方便用户进行横向比较
  • 视觉吸引力强:通过颜色和填充区域的对比,地平线图具有较强的视觉吸引力,能够快速吸引用户的注意力

3.应用场景

  • 时间序列数据可视化:地平线图非常适合展示随时间变化的数据,例如股票价格、气象数据、网站流量等
  • 多数据集比较:可以同时展示多个时间序列数据,方便用户进行对比分析
  • 仪表盘设计:在仪表盘中,地平线图可以作为紧凑的可视化组件,展示关键指标的变化
  • 活动高峰时间分析:例如分析一天中不同时间段的运动和休闲活动高峰

4.代码实现

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 from matplotlib.collections import PolyCollection
 4 
 5 def create_horizon_chart(data, num_bands=3, band_height=0.1, colors=['#6baed6', '#3182bd', '#08519c', '#fee6ce', '#fdae6b', '#e6550d']):
 6     """
 7     创建地平线图
 8     :param data: 输入数据(一维数组)
 9     :param num_bands: 分割的区域数量
10     :param band_height: 每个区域的高度
11     :param colors: 颜色列表(正负区域颜色)
12     """
13     fig, ax = plt.subplots(figsize=(10, 4))
14     ax.set_xlim(0, len(data))
15     ax.set_ylim(-1, 1)
16     ax.axis('off')  # 关闭坐标轴
17 
18     # 计算每个区域的边界
19     band_boundaries = np.linspace(-1, 1, num_bands * 2 + 1)
20 
21     for i in range(num_bands * 2):
22         # 计算当前区域的上下边界
23         lower_bound = band_boundaries[i]
24         upper_bound = band_boundaries[i + 1]
25 
26         # 创建多边形顶点
27         x = np.arange(len(data))
28         y1 = np.clip(data, lower_bound, upper_bound)
29         y2 = np.full_like(data, lower_bound)
30 
31         # 填充颜色
32         if i < num_bands:
33             color = colors[i]  # 正区域
34         else:
35             color = colors[i - num_bands + num_bands]  # 负区域
36 
37         # 创建多边形
38         verts = list(zip(x, y1)) + list(zip(x[::-1], y2[::-1]))
39         poly = PolyCollection([verts], facecolors=color, edgecolors='none')
40         ax.add_collection(poly)
41 
42     # 添加网格线
43     for i in range(-num_bands, num_bands + 1):
44         ax.axhline(i / num_bands, color='gray', linestyle='--', linewidth=0.5, alpha=0.5)
45 
46     plt.show()
47 
48 # 示例数据
49 data = np.sin(np.linspace(0, 10, 100)) + np.random.normal(0, 0.1, 100)
50 
51 # 创建地平线图
52 create_horizon_chart(data)

5.相关变体

(1)交互式地平线图(Interactive Horizon Graph, IHG)

  这种变体结合了简化折线图(RLC)和地平线图(HG)的特点,通过交互式技术控制基线位置和值的缩放因子,从而在探索大量时间序列时保持有效性。例如,用户可以通过平移和缩放来调整基线位置和波段数量,使得在分析多个时间序列时更加灵活

(2)分组地平线图(Grouped Horizon Chart)

  将数据按照特定的分组进行展示,每组数据有独立的地平线图,便于比较不同组之间的趋势和差异。这种变体适用于需要同时对比多个相关数据集的场景,例如不同地区的经济指标或不同产品的销售数据

(3)带注释的地平线图(Annotated Horizon Chart)

  在地平线图中添加注释,用于解释特定数据点或趋势,帮助用户更好地理解数据。这种变体特别适用于需要对数据进行详细解读的场景,例如在金融分析中对股票价格波动进行注释

(4)多层地平线图(Multi-layered Horizon Chart)

  通过增加分层数量来更细致地展示数据的波动。例如,可以将数据分为更多的正负层,以更精确地反映数据的变化。这种变体适用于需要高精度展示数据波动的场景

三、河流图

1.概念

  河流图是一种数据可视化图表,它通过流动的形状来展示不同类别的数据随时间的变化情况,有时候也叫做“主题河流图”。这种图表是堆叠面积图的一种变形,它将数据分散到一个变化的中心基准线上,而不是将数据描绘在一个固定的、笔直的轴上。河流图的特点是将堆叠的区域曲线“平滑”地连接起来,形成一条像河流一样的曲线

2.特点

  • 流动感:通过流动的形状展示数据的变化趋势,具有较高的可读性,尤其在数据波动变化大时,它的可视化效果更明显
  • 对比性:在同一时间上可以对不同的数据进行对比,不同颜色的条带代表不同的数据分类在相同的时间段内的不同数值大小
  • 交互性:适合搭配交互设计来展现,当数据类型较多时,可以通过鼠标的移动突出某个时间点上的详细数据值

3.应用场景

  • 展示时间序列数据的变化趋势,比如不同地区的气温变化;
  • 对比不同数据集的各个类别之间的变化趋势,比如不同产品的销售额;
  • 展示不同类别在整体中的占比和变化情况,比如不同人群的年龄分布
  • 展示事件发生的时间、热度等信息,能够体现事件随时间演变的过程,主要应用在新闻事件分析中,如金融事件、政治事件等

4.代码实现

 1 import matplotlib.pyplot as plt
 2 import pandas as pd
 3 import numpy as np
 4 
 5 plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定中文字体为黑体
 6 plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
 7 
 8 # 创建示例数据
 9 dates = pd.date_range('20210401', periods=60)
10 data = pd.DataFrame(np.random.randn(60, 3), index=dates, columns=list('ABC'))
11 data = data.cumsum()
12 
13 # 绘制河流图
14 fig, ax = plt.subplots(figsize=(10, 4))
15 data.plot.area(ax=ax, stacked=False)
16 
17 # 设置图表标题和标签
18 ax.set_title('河流图示例')
19 ax.set_xlabel('日期')
20 ax.set_ylabel('')
21 
22 plt.show()

5.相关变体

(1)基本河流图:展示单一数据集的河流图。

(2)分组河流图:将两组数据并排展示,每组数据都有自己的河流图。

(3)带注释的河流图:在河流图上添加注释,标注特定的数据点或趋势。

(4)多层河流图:通过增加分层数量来更细致地展示数据的波动。

四、瀑布图

1.概念

  瀑布图,也称为桥图,是一种特殊的图表类型,用于展示一系列数据的累积效应。它通过水平条形来表示每个数据点对总体的贡献,每个条形的起点基于前一个条形的终点,清晰地展示了从初始值到最终值的变化过程,直观地呈现出数据的增减变化和累积效果。

2.特点

  • 清晰展示数据变化:通过连续的条形展示数据的增减变化,能让观众迅速了解每个数据点对整体的影响,以及数据从起始到结束的演变过程。
  • 强调累积效果:可以直观地展示出各个数据点的累积效应,便于分析不同部分对总体的贡献,以及它们之间的关系。
  • 易于理解:其可视化方式简单易懂,即使对于没有专业数据分析背景的人,也能轻松理解数据的变化和累积情况。

3.应用场景

  • 财务分析:常用于展示公司的收入、成本、利润等财务指标的变化。例如,展示销售收入、成本、毛利、净利润等各个部分对最终利润的影响,帮助分析利润的构成和变化原因。
  • 项目进度管理:可以展示项目的各个阶段对总体进度的影响,如任务的开始和结束时间、资源的投入等,便于监控项目进度和发现潜在问题。
  • 人口统计:用于展示人口的出生、死亡、迁移等因素对人口数量的影响,帮助了解人口的动态变化。
  • 市场份额分析:展示不同品牌或产品在市场中的份额变化,以及各部分对总体市场份额的贡献,有助于分析市场竞争态势。

4.代码实现

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 # 数据
 5 categories = ['A', 'B', 'C', 'D', 'E']
 6 values = [10, -5, 7, -3, 12]  # 正数表示增加,负数表示减少
 7 
 8 # 计算累计值
 9 cumulative = np.cumsum(values)
10 
11 # 创建图形
12 fig, ax = plt.subplots()
13 
14 # 绘制条形图
15 bar_colors = ['#76D7C4' if val >= 0 else '#EC7063' for val in values]  # 根据正负值设置颜色
16 bars = ax.bar(categories, values, color=bar_colors)
17 
18 # 添加累计值的水平线
19 for i, cum in enumerate(cumulative):
20     ax.plot([i - 0.4, i + 0.4], [cum, cum], color='black', linewidth=1)
21 
22 # 添加文本标签
23 for bar, val, cum in zip(bars, values, cumulative):
24     if val >= 0:
25         ax.text(bar.get_x() + bar.get_width() / 2, bar.get_height() / 2, f'+{val}', ha='center', va='center')
26     else:
27         ax.text(bar.get_x() + bar.get_width() / 2, bar.get_height() / 2, f'{val}', ha='center', va='center')
28     ax.text(bar.get_x() + bar.get_width() / 2, cum, f'{cum}', ha='center', va='bottom')
29 
30 # 设置标题和标签
31 ax.set_title('Waterfall Chart')
32 ax.set_xlabel('Categories')
33 ax.set_ylabel('Values')
34 
35 # 显示图形
36 plt.show()

5.相关变体

(1)堆积瀑布图(Stacked Waterfall Chart)

  堆积瀑布图在基本瀑布图的基础上,将多个数据系列堆叠在一起,用于展示多个变量对总值的贡献。 特点:可以同时展示多个数据系列的变化;每个条形图可以分为多个部分,表示不同变量的贡献。

(2)百分比瀑布图(Percentage Waterfall Chart)

  百分比瀑布图将每个条形的高度表示为相对于总值的百分比变化,而不是绝对值变化。这种图表适合展示比例变化。 特点:每个条形的高度表示百分比变化;适用于展示比例变化,而不是绝对值变化。

(3)带有阈值的瀑布图(Waterfall Chart with Threshold)

  这种瀑布图在基本瀑布图的基础上,添加了阈值线,用于突出显示某些关键值。 特点:添加水平阈值线,用于标记关键值;可以突出显示超过或低于阈值的部分。

五、烛形图

1.概念

  烛形图,又称 K 线图,是一种广泛用于金融市场的图表类型,用于展示价格随时间的变化。它起源于 17 世纪日本的米市交易,后被引入西方金融市场。每根 "蜡烛" 由实体(body)和影线(wick)组成,实体表示开盘价和收盘价之间的价差,影线则表示最高价和最低价。

2.特点

  • 信息丰富:单根 K 线包含四个关键价格点(开盘价、收盘价、最高价、最低价)。
  • 视觉直观:通过颜色(通常红色表示下跌,绿色表示上涨)快速识别价格变动方向。
  • 形态多样:不同的 K 线组合(如十字星、锤子线、吞没形态)可预测市场趋势。
  • 时间灵活:可应用于不同时间周期(分钟、小时、日、周、月)。

3.应用场景

  • 金融交易:股票、期货、外汇、加密货币等市场的价格分析。
  • 技术分析:识别支撑位、阻力位、趋势反转和市场情绪。
  • 风险管理:通过止损位和止盈位的设置管理交易风险。
  • 量化交易:作为算法交易策略的基础数据可视化工具。

4.代码实现

 1 import plotly.graph_objects as go
 2 # 数据
 3 data = [
 4     {'date': '2023-01-01', 'open': 100, 'high': 110, 'low': 95, 'close': 105},
 5     {'date': '2023-01-02', 'open': 105, 'high': 115, 'low': 100, 'close': 110},
 6     {'date': '2023-01-03', 'open': 110, 'high': 120, 'low': 105, 'close': 115},
 7     {'date': '2023-01-04', 'open': 115, 'high': 125, 'low': 110, 'close': 120},
 8     {'date': '2023-01-05', 'open': 120, 'high': 130, 'low': 115, 'close': 125}
 9 ]
10 
11 # 提取数据
12 dates = [d['date'] for d in data]
13 opens = [d['open'] for d in data]
14 highs = [d['high'] for d in data]
15 lows = [d['low'] for d in data]
16 closes = [d['close'] for d in data]
17 
18 # 创建烛形图
19 fig = go.Figure(data=[go.Candlestick(
20     x=dates,
21     open=opens,
22     high=highs,
23     low=lows,
24     close=closes,
25     increasing_line_color='green',  # 上涨颜色
26     decreasing_line_color='red'    # 下跌颜色
27 )])
28 
29 # 更新布局
30 fig.update_layout(
31     title='Candlestick Chart',
32     xaxis_title='Date',
33     yaxis_title='Price',
34     xaxis_rangeslider_visible=False  # 隐藏滑块
35 )
36 
37 # 显示图形
38 fig.show()

5.相关变体

(1)带有移动平均线的烛形图

  在烛形图的基础上添加移动平均线(MA),用于平滑价格数据,帮助识别趋势。特点:短期移动平均线(如5日均线):快速反映价格的短期波动;长期移动平均线(如20日均线):平滑价格波动,帮助识别长期趋势;交叉信号:短期均线向上穿过长期均线可能表示买入信号;反之,向下穿过可能表示卖出信号。趋势确认:移动平均线的方向和斜率可以确认当前的趋势强度。

(2)带有成交量的烛形图

  在烛形图下方添加成交量柱状图,用于展示每个时间点的交易活跃程度。特点:成交量柱状图:通常显示在烛形图下方,用颜色区分上涨和下跌;交易活跃度:成交量的大小可以反映市场的情绪和交易活跃度;结合价格分析:高成交量的上涨或下跌可能表示强烈的市场趋势;背离信号:价格创新高但成交量未同步增加,可能表示上涨动力减弱。

(3)带有布林带的烛形图

  布林带(Bollinger Bands)是基于标准差的波动范围指标,通常添加在烛形图上,用于衡量价格波动的范围。特点:布林带:由中轨(移动平均线)、上轨(中轨 + 2倍标准差)和下轨(中轨 - 2倍标准差)组成;波动范围:布林带的宽度可以反映市场的波动性;价格位置:价格触及上轨可能表示超买,触及下轨可能表示超卖;动态调整:布林带会随着价格的波动动态调整,帮助识别市场的变化。

(4)Heikin-Ashi 烛形图

  Heikin-Ashi(平均蜡烛图)是一种特殊的烛形图,通过平均化价格数据来平滑价格波动,使趋势更加明显。特点:平滑价格:通过计算平均开盘价、收盘价、最高价和最低价来生成蜡烛图;趋势识别:白色蜡烛表示上涨趋势,黑色蜡烛表示下跌趋势;过滤噪声:更适合识别长期趋势,减少短期波动的干扰;视觉清晰:通过平滑处理,使图表更易于阅读和分析。

七、总结

图表类型概念特点优点缺点应用场景
地平线图 一种用于展示时间序列数据的可视化方法,通过将数据分割成多个水平条带,并对每个条带进行颜色编码来表示数据的正负变化。 数据按时间顺序分层显示,正负变化通过颜色区分,可堆叠显示多个时间序列。 空间效率高,可展示大量数据,易于识别数据的波动和趋势,适合比较多个时间序列。 对初学者来说可能较难理解,颜色编码需清晰,否则易混淆,不适合展示非时间序列数据。 金融市场分析(股票价格波动),气象数据展示(温度、降雨量变化),网站流量分析(用户访问量变化)。
河流图 一种展示数据随时间变化的动态图表,通常用于展示数据的流向和变化趋势,数据流的宽度随时间变化而变化。 数据流随时间动态变化,流的宽度表示数据量,可展示多个数据流的交互。 直观展示数据的流向和变化,适合展示动态变化过程,易于理解数据的增减趋势。 对复杂数据流的展示可能较混乱,不适合展示静态数据,需要较多空间来展示时间维度。 社交网络分析(信息传播路径),人口迁移分析(人口流动趋势),金流向分析(资金在不同项目间的流动)。
瀑布图 一种展示数据随时间或其他序列变化的增减情况的图表,通过条形图的上升和下降来表示数据的变化。 条形图表示数据的增减,可展示累计效果,清晰的正负变化表示。 直观展示数据的增减变化,适合分析数据的变化过程,易于理解数据的累计效果。 对复杂数据的展示可能较混乱,不适合展示非序列数据,需要清晰的标签和注释来增强可读性。 财务分析(收入和支出的变化),项目管理(任务进度的变化),数据分析(数据的增减变化)。
烛形图 一种用于金融市场分析的图表,通过蜡烛状的图形展示数据的开盘价、收盘价、最高价和最低价。 蜡烛图表示数据的开盘价、收盘价、最高价和最低价,颜色区分上涨和下跌,可添加技术指标(如移动平均线)。 直观展示价格波动,适合金融市场分析,易于识别趋势和交易信号。 对非金融市场数据不太适用,需要一定的金融知识来解读,图表较为复杂,初学者可能难以理解。 金融市场分析(股票、外汇价格波动),技术分析(识别买卖信号),交易决策支持(确定交易时机)。
posted @ 2025-05-12 10:12  柒柒冉  Views(61)  Comments(0)    收藏  举报