目录
时间趋势类可视化图像主要用于展示数据随时间的变化情况,帮助用户快速理解数据的动态特征和趋势。以下是几种常见的时间趋势类图表的总结,包括它们的特点、应用场景以及使用 Python(Matplotlib、Seaborn、Plotly 等库)的实现过程及结果。
1. 地平线图(Horizon Chart)
特点
-
紧凑性:能够在有限的空间内展示大量的时间序列数据。
-
直观性:通过颜色和高度的变化,用户可以快速识别数据的波动趋势和异常点。
-
多层显示:数据被分割成多个层次,每一层代表一个范围,便于用户理解数据的分布。
应用场景
-
时间序列分析:适用于展示股票价格、温度变化、网站流量等随时间变化的数据。
-
仪表板设计:在有限的空间内展示多个时间序列数据,方便用户快速获取信息。
代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
# 设置中文字体
rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 生成示例数据
np.random.seed(42)
x = np.linspace(0, 10, 100)
data = np.sin(x * 2) * 10 + np.random.normal(0, 1, 100)
# 创建地平线图
def plot_horizon(x, data, bands=3, colors=('#B2182B', '#EF8A62', '#FDDBC7', '#D1E5F0', '#67A9CF', '#2166AC')):
fig, ax = plt.subplots(figsize=(10, 4))
# 计算每个带的高度
band_height = (np.max(data) - np.min(data)) / bands
# 绘制正负区域
for i in range(bands):
# 正数部分
positive_data = np.where(data > 0, np.clip(data, i * band_height, (i + 1) * band_height) - i * band_height, 0)
ax.fill_between(x, 0, positive_data,
color=colors[i % len(colors)],
alpha=0.8,
edgecolor='none')
# 负数部分
negative_data = np.where(data < 0, np.clip(data, -(i + 1) * band_height, -i * band_height) + i * band_height, 0)
ax.fill_between(x, 0, negative_data,
color=colors[(i + bands) % len(colors)],
alpha=0.8,
edgecolor='none')
# 设置坐标轴和标签
ax.set_xlabel('时间', fontsize=12)
ax.set_ylabel('数值强度', fontsize=12)
ax.set_title('地平线图示例(3波段正负分离)', fontsize=14, pad=20)
ax.grid(True, linestyle='--', alpha=0.6)
# 隐藏y轴刻度
ax.set_yticks([])
plt.tight_layout()
return fig
# 绘制图表
plot_horizon(x, data)
plt.show()
结果
这段代码生成了一幅地平线图,用于可视化时间序列数据的波动。它通过将数据划分为多个波段(正负区域),并用不同颜色填充每个波段,直观地展示了数据的强度变化。图中时间轴表示数据的时间维度,数值强度轴表示数据的大小。正数区域和负数区域分别用不同颜色区分,且每个波段的颜色深浅表示数据的强度。地平线图通过压缩数据的显示范围,使得在有限的空间内能够清晰地呈现数据的整体趋势和局部波动,适合用于展示复杂的时间序列数据。
2. 河流图(Streamgraph)
特点
-
动态展示:能够动态展示多个时间序列数据的变化趋势。
-
美观性:视觉效果美观,常用于展示数据的流动性和变化趋势。
-
层次结构:通过堆叠的方式,用户可以直观地看到不同类别数据的相对大小和变化。
应用场景
-
时间序列分析:适用于展示多个时间序列数据的变化趋势,例如不同产品的销售数据、不同地区的流量数据等。
-
数据比较:用于比较不同类别数据的相对大小和变化趋势。
代码:
from pyecharts.charts import ThemeRiver
import pyecharts.options as opts
import pandas as pd
# 导入数据
data = pd.read_csv('river_data.csv')
# print(data)
# print(data)
#数据格式
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
# series_name: Sequence,
# 系列数据项
# data: types.Sequence[types.Union[opts.ThemeRiverItem, dict]],
data_list = []
# 封装数据
for i in zip(data['date'],data['num'],data['series']):
data_list.append(list(i))
# print(data_list)
series = ['分支1','分支2','分支3','分支4','分支5','分支6']
# 绘制,设置类型为时间
wc = ThemeRiver(init_opts=opts.InitOpts(height='600px'))\
.add(series_name=series, data=data_list, singleaxis_opts=opts.SingleAxisOpts(type_='time'))\
.render()
结果
这段代码使用 pyecharts 的ThemeRiver绘制了一条主题河流图。它从 river_data.csv文件中导入数据,数据包含日期、数值和系列名称。代码将数据封装为列表格式,并设置了6个系列(分支1到分支6)。主题河流图以时间为单轴,展示了不同分支在不同时间点的数值变化,通过流动的线条直观呈现各分支随时间的动态趋势,适用于展示多维度数据随时间的变化情况。
3. 瀑布图(Waterfall Chart)
特点
-
增减变化:能够清晰地展示数据的增减变化。
-
直观性:通过柱状图的上升和下降,用户可以快速了解数据的变化趋势。
-
累计效果:可以展示数据的累计效果,帮助用户理解最终结果是如何逐步形成的。
应用场景
-
财务分析:适用于展示收入、支出、利润等财务数据的变化。
-
库存管理:用于展示库存的增减变化。
-
项目管理:用于展示项目进度的变化。
代码:
import plotly.graph_objects as go
# 生成示例数据
data = [10, -5, 7, -3, 6]
labels = ['初始值', '支出1', '收入1', '支出2', '收入2']
# 创建瀑布图
fig = go.Figure(go.Waterfall(
name="20", orientation="v",
measure=["absolute", "relative", "relative", "relative", "relative"],
x=labels,
textposition="outside",
text=data,
y=data,
connector={"line": {"color": "rgb(63, 63, 63)"}},
))
# 更新布局
fig.update_layout(title='瀑布图示例', xaxis_title='项目', yaxis_title='值')
fig.show()
结果
这段代码生成了一个瀑布图,展示了初始值和一系列收支变化对数值的影响。图中用柱状条表示每个项目的增减值,通过颜色区分正负变化,并用连接线清晰展示数值的累积过程。它直观呈现了从初始值到最终结果的动态变化,常用于财务分析等场景。
4. 烛形图(Candlestick Chart)
特点
-
详细信息:能够展示每个时间单位内的详细价格信息,包括开盘价、收盘价、最高价和最低价。
-
趋势判断:通过蜡烛的颜色和形状,用户可以快速判断市场的趋势和情绪。
-
技术分析:是金融领域中常用的技术分析工具,能够帮助投资者做出决策。
应用场景
-
金融市场分析:适用于展示股票、期货、外汇等金融产品的价格变化。
-
技术分析:用于识别市场趋势和交易信号。
代码:
import plotly.graph_objects as go
import pandas as pd
# 生成示例数据
df = pd.DataFrame({
'Date': pd.date_range(start='2023-01-01', periods=100, freq='D'),
'Open': np.random.randint(100, 200, 100),
'High': np.random.randint(200, 300, 100),
'Low': np.random.randint(50, 150, 100),
'Close': np.random.randint(150, 250, 100)
})
# 创建烛形图
fig = go.Figure(data=[go.Candlestick(x=df['Date'],
open=df['Open'],
high=df['High'],
low=df['Low'],
close=df['Close'])])
# 更新布局
fig.update_layout(title='烛形图示例', xaxis_title='日期', yaxis_title='价格')
fig.show()
结果:

这段代码生成了一个烛形图,展示了100天内的价格波动。它以日期为X轴,价格为Y轴,通过烛体(表示开盘价与收盘价)和影线(表示最高价与最低价)来呈现每天的价格变化,直观反映了涨跌情况,常用于金融领域分析价格走势。
5. 总结
时间趋势类可视化图像在数据分析中具有重要作用,它们能够帮助用户快速理解数据的动态特征和趋势。以下是几种常见的时间趋势类图表的总结:
-
地平线图:适用于展示时间序列数据的波动,适用于仪表板设计。
-
河流图:适用于展示多个时间序列数据的变化趋势,视觉效果美观。
-
瀑布图:适用于展示数据的增减变化,适用于财务分析和库存管理。
-
烛形图:适用于展示金融数据的价格变化,是技术分析的重要工具。