第七章 时间序列可视化课堂练习

Author

kaka

1 案例数据

1.1 all_stock_2024:工商银行、招商应用、中信证券和贵州茅台四个股票2024各天交易数据

  • data为为日期变量,但该日期变量不规则(不连续),周末和公众假期没有交易数据;

  • 编码名称用于识别不同股票,注意不同股票有交易数据日期不一定一致,但本例种各股票均有242个交易日数据;

  • 开盘价到换手率 均为数值变量,开盘价到成交量与每股资产有关,不同股票间不可比;

  • 交易量的单位为手(百股)、成交额的单位为元,振幅等四个变量均为相对指标。

2 折线图和面积图

2.1 合并折线图

  • 将四只股票的涨跌幅 做作折线图,将四条折线在同一个图形输出;

  • 日期截取2024-9-12024-10-31

  • 添加一条纵轴为0的参考线,采用twodash 的线型;

  • 将图标题改为“合并涨跌幅折线图”。

2.2 分面折线图

  • 将四只股票的收盘 价格做作折线图,将四条折线图分面输出;

  • 日期截取一整年;

  • 并使用ggpol::geom_tshighlight2024-9-12024-10-31 时间段高亮显示

2.3 面积图

  • 将四只股票成交量的做作面积图,将四个面积图分面输出;

  • 将成交量的单位改为万手

2.4 图形观察和代码编写的心得体会

  • 合并折线图

    可视化效果:多股涨跌幅折线图通过动态曲线展现金融产品波动轨迹,零基准线(twodash虚线)清晰划分涨跌区域,时序连续性完整呈现9-10月市场变化,色彩编码区分不同金融产品走势
    设计选择:图例内嵌(position=c(0.1,0.8))提升数据-图例对应效率,无框背景(background=element_blank)避免视觉干扰,0.5线宽平衡趋势辨识度与多重交叉,标题直指核心分析目标
    关键特征:曲线斜率映射价格变化速率,峰值/谷值反映市场情绪转折,跨产品曲线间距揭示相对强弱关系,双月时间跨度捕捉中期趋势

    代码编写心得
    数据精炼:日期范围过滤聚焦关键时段,三列选择(日期/名称/涨跌幅)精准提取核心维度,管道操作保持代码流畅性
    主题定制:legend.position坐标定位实现图例智能内嵌,element_blank移除冗余边框元素,全局主题复用提升多图一致性
    图层构建:geom_line绘制多维时间序列,geom_hline创建零轴基准,aes颜色映射自动生成图例系统
    效率优化:size参数控制线条表现力,ggtitle直接添加标题,filter日期范围采用字符串比较简化日期处理

  • 分面折线图

    图形观察心得
    可视化效果:分面折线图通过独立坐标系精准呈现个股走势,自适应Y轴(scale=“free”)凸显个体波动特征,90度旋转标签(angle=90)解决密集日期显示难题,天蓝色高亮区域(geom_tshighlight)聚焦关键分析时段
    设计选择:双月时段高亮强化市场事件关联性,移除次要网格线(panel.grid.minor)净化视觉焦点,关闭图例(legend.position=“none”)依赖分面标题实现标识,0.45线宽(size)平衡趋势清晰度与多图协调性
    布局创新:2列分面(ncol=2)构建垂直阅读流,月度断点(date_breaks)标记时间节奏,紧凑边距(expand=c(0,0))最大化数据展示空间,浅色透明填充(alpha=0.02)实现非侵入式时段标注

    代码编写心得
    数据管道:select三步精准提取核心维度,原生日期格式直接适配时间序列可视化
    图层架构:

    • geom_line绘制基础价格曲线

    • geom_tshighlight封装时段高亮逻辑,xmin/xmax参数动态划定区间

    • facet_wrap实现矩阵式分面,free参数解放纵轴约束
      主题精调

  • 面积图

    可视化效果:分面面积图通过填充曲线下空间直观呈现个股成交量累积效应,Y轴单位转换(万手)优化数值可读性,自适应纵轴(scale=“free”)精准匹配个股量级差异,无图例设计依赖分面标题实现标识

    核心技巧:

    1. 实时单位转换y=成交量/10000在美学映射中直接转换单位,避免创建新变量

    2. 分面隔离facet_wrap(~名称,ncol=2,scale="free")实现:

      • 个股独立坐标系

      • 自适应Y轴缩放

      • 垂直双列布局

3 流线图和地平线图

3.1 流线图

  • 将四只股票的交易额 做作流线图,将四个面积图分面输出;

  • 将交易额的单位改为亿元

3.2 地平线图

  • 采用ggHoriPlot::geom_horizon函数,对四只股票的交易额 做作地平线图
  • 设置原点为均值origin='mean',输出配色图例

3.3 图形观察和代码编写的心得体会

  • 流线图

    图形观察心得

    流线图展示多股成交额变化,波浪宽度代表金额大小

    颜色区分不同股票,整体呈现资金流动趋势

    底部图例单行排列节省空间

    单位转换为亿元便于阅读

    代码编写要点

    geom_stream(bw=0.3):创建流线图,带宽控制曲线平滑度

    legend.position=“bottom”:图例置于底部

    成交额/100000000:实时转换为亿元单位

    guides(fill=guide_legend(nrow=1)):图例单行排列

  • 地平线图

图形观察心得

  1. 图表类型:这是地平线图,用一行行彩色条带表示不同股票的每日成交额变化。

  2. 颜色含义:

    • 颜色深浅代表成交额相对于平均值的偏离程度。

    • 高于平均值的日子用暖色(如红、黄),低于平均值的用冷色(如蓝)。

    • 偏离越大,颜色越深。

  3. 布局:每只股票的数据占据一行,上下排列,方便同时比较多只股票。

  4. 优点:这种图非常节省空间,能清晰显示成交额的高峰(暖色深)和低谷(冷色深)时期。

  5. 整体效果:一眼就能看出不同股票在什么时间段成交活跃或清淡。

代码编写心得

  1. 关键函数:geom_horizon() 负责画出彩色条带。

  2. 重要设置:

    • origin='mean':以平均值作为判断高低的分界线。

    • horizonscale=10:把高低差异分成10个等级,用不同深浅颜色表示。

  3. 数据处理:代码只选取了日期、股票名称和成交额这三项数据。

  4. 分面显示:facet_grid(名称~.) 让每只股票的数据独占一行。

  5. 美化:使用了简洁的主题 (theme_few()) 并添加了标题。

4 不规则时间序列图

4.1 数据准备

  • 通过zoo::rollmean 时间收盘价的5天、10天和20天的移动平均

  • 将日期变量转化为id变量

4.2 平滑曲线图

  • 将四只股票收盘价和3种移动平均的折线图分面输出;

  • 横轴的每隔30天一个刻度,只显示月/日;

4.3 K线图

  • 选择工商银行数据作出,2024年的K线图

  • scale_x_continuous 将横轴坐标刻度转化回日期型

4.4 图形观察和代码编写的心得体会

  • 平滑曲线图

    图形观察心得

    1. 分面折线图展示多股技术指标(收盘价/均线)走势

    2. 颜色区分不同指标(收盘价、MA5/MA10/MA20)

    3. 横轴优化:日期标签按月-日格式显示,间隔30天

    4. 独立纵轴:各股价格分面展示,适应不同价格区间

    代码编写要点

    1. 数据转换:

      • gather()合并收盘价/均线列→长格式

      • 创建指标列区分数值类型

    2. 核心绘图:

      • geom_line(size=0.8)绘制粗线增强可视性

      • scale_x_continuous()定制日期标签格式

    3. 布局设计:

      • 隐藏图例(guides(color="none"))

      • 双列分面(facet_wrap(ncol=2))

      • 自由Y轴(scale="free")适配股价差异

  • k线图

图形观察心得

  1. K线图结构:

    • 竖线段表示每日股价波动范围(最高-最低)

    • 矩形框表示开盘收盘区间(红涨绿跌)

  2. 技术指标叠加:

    • 蓝色MA5(5日均线)

    • 橙色MA10(10日均线)

    • 紫色MA20(20日均线)

  3. 视觉优化:

    • 日期标签按月-日格式显示

    • 顶部图例标注均线含义

    • 红绿颜色区分涨跌直观

代码编写要点

  1. 核心图层:

    • geom_segment:绘制最高-最低价影线

    • geom_rect:绘制开盘-收盘实体(红涨绿跌)

    • geom_line:三条均线叠加

  2. 颜色映射:

    • scale_fill_manual:红/绿填充K线实体

    • scale_color_manual:三色区分均线

  3. 坐标优化:

    • scale_x_continuous:30天间隔标签

    • pmin/pmax:智能计算实体位置

  4. 布局精简:

    • theme_minimal:简洁背景

    • legend.position="top":图例顶部水平排列

    • guides(fill="none"):隐藏涨跌图例(颜色自解释)