时间趋势类
import plotly.graph_objects as go import numpy as np # 生成示例数据 x = np.arange(0, 10, 0.1) y = np.sin(x) * 5 + np.random.normal(0, 0.5, 100) # 创建分层数据 layers = 3 max_val = np.max(np.abs(y)) band_height = max_val / layers fig = go.Figure() for i in range(layers): mask = (y >= i*band_height) & (y < (i+1)*band_height) fig.add_trace(go.Scatter( x=x, y=np.where(mask, y - i*band_height, np.nan), fill='tozeroy', line=dict(color=f'rgba(0,0,255,{0.3 + i*0.2})'), name=f'Layer {i+1}' )) fig.update_layout( title='地平线图优化示例', height=200, showlegend=False ) fig.show()
import plotly.express as px import pandas as pd # 示例数据 data = pd.DataFrame({ '时间': pd.date_range(start='2023-01-01', periods=12), 'A': [10, 12, 15, 18, 20, 17, 14, 12, 10, 8, 6, 4], 'B': [5, 7, 9, 11, 13, 15, 14, 12, 10, 8, 6, 4], 'C': [2, 3, 5, 7, 9, 10, 8, 6, 4, 3, 2, 1] }) # 绘制河流图 fig = px.area(data, x='时间', y=['A', 'B', 'C'], color_discrete_sequence=['#4CAF50', '#2196F3', '#FF5722'], title='多类别时间趋势河流图') fig.update_layout(yaxis_title='数值', xaxis_title='月份', legend_title='类别', hovermode='x unified') fig.show()
import plotly.graph_objects as go import pandas as pd # 示例数据(股票价格) data = pd.read_csv('stock_data.csv') # 包含日期、开盘价、最高价、最低价、收盘价 data['日期'] = pd.to_datetime(data['日期']) # 绘制烛形图 fig = go.Figure(data=[go.Candlestick(x=data['日期'], open=data['开盘价'], high=data['最高价'], low=data['最低价'], close=data['收盘价'], increasing_line_color='#4CAF50', decreasing_line_color='#FF5722')]) fig.update_layout(title='股票价格烛形图', xaxis_title='日期', yaxis_title='价格', xaxis_rangeslider_visible=False) fig.show()
import plotly.graph_objects as go import pandas as pd # 示例数据(股票价格) data = pd.read_csv('stock_data.csv') # 包含日期、开盘价、最高价、最低价、收盘价 data['日期'] = pd.to_datetime(data['日期']) # 绘制烛形图 fig = go.Figure(data=[go.Candlestick(x=data['日期'], open=data['开盘价'], high=data['最高价'], low=data['最低价'], close=data['收盘价'], increasing_line_color='#4CAF50', decreasing_line_color='#FF5722')]) fig.update_layout(title='股票价格烛形图', xaxis_title='日期', yaxis_title='价格', xaxis_rangeslider_visible=False) fig.show()

结果:以蜡烛形态展示价格波动,支持交互缩放、悬停查看具体数值,可叠加移动平均线辅助分析。
import matplotlib.pyplot as plt import numpy as np # 模拟数据 dates = pd.date_range(start='2023-01-01', periods=365) data = np.cumsum(np.random.randn(365, 3), axis=0) # 3组时间序列 # 绘制地平线图 fig, axes = plt.subplots(nrows=3, sharex=True, figsize=(12, 6)) for i in range(3): axes[i].plot(dates, data[:, i], color='steelblue') axes[i].fill_between(dates, 0, data[:, i], where=data[:, i] >= 0, color='skyblue') axes[i].fill_between(dates, 0, data[:, i], where=data[:, i] < 0, color='salmon') axes[i].set_ylabel(f'指标{i+1}') axes[i].grid(axis='y', linestyle='--', alpha=0.3) plt.xlabel('日期') plt.suptitle('多指标时间趋势地平线图') plt.tight_layout() plt.show()
结果:通过分层子图和颜色填充,清晰展示多组数据的波动方向及幅度,适合对比分析。
以下是对时间趋势类可视化图表的分析总结,涵盖特点、应用场景、常用工具及实现示例:
地平线图 多序列时间数据分层平行展示,通过颜色/高度变化体现趋势,紧凑节省空间,适合对比不同序列的波动与差异。 多变量长期趋势对比(如不同地区GDP增长、各产品线销售额变化)、异常值检测(如某序列突然偏离趋势)。 Python(Matplotlib/Plotly)、R(ggplot2)、Power BI 1. 导入数据与库; 2. 归一化数据以统一尺度; 3. 分区域绘制各序列曲线,填充颜色区分正负值; 4. 隐藏冗余轴线,优化标签。 多层水平区域,每层对应一个变量,曲线波动显示趋势,颜色填充突出增长/下降区间,整体布局紧凑易对比。
河流图 市场份额消长(如各品牌产品销量占比变化)、人口结构演变(如不同年龄层人口比例迁移)、资源分配动态。 Python(Plotly/Matplotlib)、R(ggplot2)、Flourish 1. 准备堆叠数据(时间-类别-数值); 2. 使用 area_plot 或 stackplot 函数绘制堆叠面积图; 3. 调整透明度与颜色映射,添加流动曲线平滑效果。 层叠的彩色区域随时间流动,边缘曲线显示整体趋势,相邻类别间的交界变化直观反映份额转移(如某类别“河流”变宽表示份额增加)。
瀑布图 通过矩形条的层级叠加,展示数据从起点到终点的阶段性变化,清晰拆解各因素对结果的正负影响。 财务分析(如净利润构成:收入增长/成本削减的贡献)、项目进度分解(如初始目标到最终成果的各阶段增减)、人口变化因素分析。 Python(Matplotlib/Plotly)、Excel、Power BI 1. 定义初始值、中间变化值、最终值; 2. 计算各阶段累计值,区分正负贡献; 3. 用 bar 函数绘制垂直条,连接点用水平线表示累计趋势。 从左到右,初始值与最终值为两端标杆,中间各矩形条表示增减因素(正向上方,负向下方),水平线串联显示累计过程(如从初始100到最终150,中间拆解为+50、-30、+30等)。
烛形图(K线图) 每个时间单位(如日、周)用“蜡烛”表示开盘价、收盘价、最高价、最低价,实体(开盘-收盘)与影线(最高-最低)清晰展示价格波动范围。 金融市场分析(股票、外汇、期货价格走势)、资产波动率评估、技术分析(如开盘价与收盘价的相对位置判断多空力量)。 Python(Plotly/mplfinance)、R(quantmod)、TradingView 1. 导入金融时间序列数据(含开盘、收盘、最高、最低价); 2. 使用 mplfinance 或 plotly.graph_objects.Candlestick 绘制; 3. 自定义蜡烛颜色(如上涨绿色、下跌红色)。 每个蜡烛由矩形实体(开盘-收盘)和上下影线(最高-最低)组成,实体颜色区分涨跌(如收盘价>开盘价为实心,反之为空心),整体呈现价格波动的时间序列。
补充说明
1. 工具选择建议:
- 快速可视化:Excel(适合瀑布图)、Power BI(拖放式操作,适合非技术用户)。
- 编程定制:Python(Matplotlib/Plotly灵活性高,适合复杂场景)、R(ggplot2语法适合学术/出版级图表)。
- 交互式展示:Plotly(网页交互式图表)、TradingView(专业金融烛形图)。
2. 设计注意事项:
- 地平线图:避免过度堆积序列(建议≤8个),需对数据归一化以统一量纲。
- 河流图:颜色区分度需高,避免因层数过多导致视觉混乱(建议≤6个类别)。
- 瀑布图:明确标注各阶段数值,区分正负贡献的颜色(如正向蓝色、负向红色)。
- 烛形图:结合成交量等辅助指标,避免单一使用导致分析偏差。
快速对比不同图表的适用场景与实现逻辑,结合具体数据特征选择最有效的可视化方案。
通用设计原则
浙公网安备 33010602011771号