时间序列数据是观察事物动态演变的核心载体,无论是追踪股价波动、分析企业盈利趋势,还是洞察气候变化规律,都需要借助可视化工具揭示其内在模式——趋势性、季节性与周期性。从基础的折线图到多维度的螺旋图,从量化增减的瀑布图到捕捉市场情绪的烛形图,每种图表都以独特视角解码时间密码。
1. 地平线图
特点
• 通过分带和颜色渐变展示数据趋势,减少噪声干扰。
• 适合长时间跨度数据,突出高频和低频成分的变化。
• 结构清晰,通过水平带宽度固定,颜色深浅区分数据密度。
应用场景
• 金融领域:股票价格长期波动分析。
• 环境科学:气温、降水量的季节性变化研究。
• 医学研究:患者健康指标的长期跟踪。
Python实现(示例)
• 使用matplotlib自定义绘制:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
def plot_horizon_chart(ax, x, y, num_bands=4):
vmax = max(np.max(y), -np.min(y))
band_height = vmax / num_bands
pos_cmap = plt.get_cmap('YlOrRd', num_bands)
neg_cmap = plt.get_cmap('PuBu', num_bands)
for i in range(num_bands):
band = np.clip(y - i * band_height, 0, band_height)
ax.fill_between(x, i * band_height, i * band_height + band,
color=pos_cmap(i), step='mid')
for i in range(num_bands):
band = np.clip(-y - i * band_height, 0, band_height)
ax.fill_between(x, -i * band_height, -i * band_height - band,
color=neg_cmap(i), step='mid')
ax.axhline(0, color='black', lw=0.8)
ax.set_ylim(-vmax, vmax)
ax.set_xlabel('X 轴')
ax.set_ylabel('数值')
ax.set_title('自定义地平线图表')
x = np.linspace(0, 20, 1000)
y = np.sin(x) * 15 + np.cos(3 * x) * 10 + np.sin(0.5 * x) * 5
fig, ax = plt.subplots(figsize=(12, 8))
plot_horizon_chart(ax, x, y, num_bands=6)
plt.show()

2. 河流图
特点
• 以流动的带状区域展示多变量时间序列的演变。
• 颜色表示不同类别数据,宽度表示数值大小。
• 动态展示节点间关系随时间变化,适合网络时间序列。
应用场景
• 项目管理:任务进度与资源分配的动态跟踪。
• 社交网络分析:用户行为模式的时序关联性。
• 环境管理:河流水质参数的多维度变化。
Python实现
• 使用pyecharts库绘制主题河流图:
from pyecharts.charts import ThemeRiver
from pyecharts import options as opts
# 数据
data = [
["2023/01", 10, "小麦"],
["2023/01", 15, "玉米"],
["2023/01", 35, "大豆"],
["2023/02", 20, "小麦"],
["2023/02", 30, "玉米"],
["2023/02", 40, "大豆"],
["2023/03", 30, "小麦"],
["2023/03", 25, "玉米"],
["2023/03", 50, "大豆"],
]
themeriver = (
ThemeRiver()
.add(
series_name=["小麦", "玉米", "大豆"],
data=data,
singleaxis_opts=opts.SingleAxisOpts(type_="time"),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="23年1月到3月三种主要农作物产量(吨)河流图"),
tooltip_opts=opts.TooltipOpts(trigger="axis"),
)
)
themeriver.render("2.html")

3. 瀑布图
特点
• 分解数据从初始值到最终值的累积过程,突出正负贡献。
• 通过连接线展示数据流动,颜色区分增/减值(如绿色为增,红色为减)。
• 适合展示财务数据的逐步变化。
应用场景
• 财务分析:利润构成拆解(收入、成本、净利)。
• 销售管理:月度销售额的增量与损耗分析。
• 项目成本:研发阶段支出与收益的阶段性展示。
Python实现
• 使用plotly库:
import plotly.graph_objects as go
stages = ['初始销售额', '新增订单', '退单额', '促销活动', '本季度收入']
values = [1000, 500, -200, -100, 0] # 最后一个值作为总计项,自动累计
fig = go.Figure(go.Waterfall(
name="财报瀑布图",
orientation="v",
measure=["absolute", "relative", "relative", "relative", "total"],
x=stages,
text=[f"{v:+d}" if i < 4 else "" for i, v in enumerate(values)],
y=values
))
fig.update_layout(
title="企业季度财报瀑布图",
waterfallgap=0.3
)
fig.show()

4. 烛形图
特点
• 由开盘价、收盘价、最高价、最低价构成,实体颜色区分涨跌(红跌绿涨)。
• 影线长度反映价格波动范围,适合捕捉市场情绪。
• 经典形态(如锤子线、乌云盖顶)预示趋势反转。
应用场景
• 股票交易:K线图分析股价短期波动。
• 外汇市场:汇率变化的日内趋势预测。
• 期货市场:大宗商品价格的多空博弈可视化。
Python实现
• 使用mplfinance库绘制:
import pandas as pd
import numpy as np
import mplfinance as mpf
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
my_style = mpf.make_mpf_style(base_mpf_style='yahoo', rc={'font.family': 'SimHei', 'axes.unicode_minus': False})
np.random.seed(0)
dates = pd.date_range('2023-01-01', periods=30)
data = pd.DataFrame({
'Open': np.random.uniform(100, 110, size=30),
'High': np.random.uniform(110, 120, size=30),
'Low': np.random.uniform(90, 100, size=30),
'Close': np.random.uniform(100, 110, size=30),
'Volume': np.random.randint(1000, 5000, size=30)
}, index=dates)
data['High'] = data[['Open','Close','High']].max(axis=1) + np.random.uniform(0,2, size=30)
data['Low'] = data[['Open','Close','Low']].min(axis=1) - np.random.uniform(0,2, size=30)
def calc_lower_wick(row):
base = min(row['Open'], row['Close'])
return base - row['Low']
data['lower_wick'] = data.apply(calc_lower_wick, axis=1)
data['range'] = data['High'] - data['Low']
data['is_hammer'] = np.where((data['range'] > 0) & ((data['lower_wick'] / data['range']) > 0.5), data['Close'], np.nan)
data.drop(['lower_wick','range'], axis=1, inplace=True)
ap = mpf.make_addplot(data['is_hammer'], type='scatter', markersize=100, marker='v', color='red')
mpf.plot(data,
type='candle',
volume=True,
style=my_style,
addplot=ap,
title='带成交量与形态标记的烛形图',
ylabel='价格',
ylabel_lower='成交量')

| 图表类型 | 优劣势对比 | 适用场景 |
|---|---|---|
| 地平线图 | 优势: 1. 压缩空间:通过折叠多层数据带,在有限空间内展示长时间跨度趋势 2. 抗噪性强:通过分位数聚合减少异常值干扰,突出核心趋势 劣势: 1. 解读门槛高:需理解水平带颜色与分位数的对应逻辑 2. 交互依赖:数据密集时需缩放操作辅助观察 | 长周期趋势分析(如气候数据年际变化、股票十年波动模式) |
| 河流图 | 优势: 1. 动态感知:流动形态直观展现多变量协同/竞争关系(如多品类市场份额变化) 2. 美观性强:渐变色彩与曲线增强视觉吸引力 劣势: 1. 精度不足:无法精确对比同一时间点的具体数值 2. 复杂度限制:变量超过10类时易导致图形混乱 | 多变量动态关联分析(如用户行为时间分布、舆情事件热度演变) |
| 瀑布图 | 优势: 1. 过程透明:分阶段展示数据增减路径(如利润从收入到净值的转化) 2. 逻辑清晰:颜色区分正负贡献,箭头标注关键节点 劣势: 1. 扩展性弱:数据步骤超过15项时图表拥挤 2. 维度单一:仅支持单一度量指标分解 | 财务数据拆解(利润构成)、项目进度跟踪(预算消耗阶段) |
| 烛形图 | 优势: 1. 信息密度高:单根蜡烛整合开盘/收盘/最高/最低四维度数据 2. 信号明确:经典形态(如十字星、吞没形态)反映多空博弈强度 劣势: 1. 假信号风险:需结合成交量等指标验证形态可靠性 2. 周期依赖:短周期(如1分钟K线)噪声干扰显著 | 金融市场分析(股票/外汇价格波动)、供应链价格监控(大宗商品日内交易) |
786

被折叠的 条评论
为什么被折叠?



