第七章 时间序列可视化课堂练习
1 案例数据
1.1 all_stock_2024:工商银行、招商应用、中信证券和贵州茅台四个股票2024各天交易数据
data为为日期变量,但该日期变量不规则(不连续),周末和公众假期没有交易数据;编码和名称用于识别不同股票,注意不同股票有交易数据日期不一定一致,但本例种各股票均有242个交易日数据;开盘价到换手率均为数值变量,开盘价到成交量与每股资产有关,不同股票间不可比;交易量的单位为手(百股)、成交额的单位为元,振幅等四个变量均为相对指标。
2 折线图和面积图
2.1 合并折线图
将四只股票的
涨跌幅做作折线图,将四条折线在同一个图形输出;日期截取
2024-9-1到2024-10-31;添加一条纵轴为0的参考线,采用
twodash的线型;将图标题改为“合并涨跌幅折线图”。
2.2 分面折线图
将四只股票的
收盘价格做作折线图,将四条折线图分面输出;日期截取一整年;
并使用
ggpol::geom_tshighlight将2024-9-1到2024-10-31时间段高亮显示
mapping: xmin = ~as.Date("01/09/2024", format = "%d/%m/%Y"), xmax = ~as.Date("31/10/2024", format = "%d/%m/%Y")
geom_rect: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity
2.3 面积图
将四只股票的
收盘价格做作面积图,将四个面积图分面输出;将成交量的单位改为万手
2.4 图形观察和代码编写的心得体会
2.5 (合并折线图)
2.5.1 图形观察
- 数据聚焦:成功展示2024年9月1日至10月31日四只股票的涨跌幅对比
- 参考线:y=0的twodash型参考线清晰区分涨跌区域
- 图例设计:位于图表内部(0.1,0.8)位置,背景透明,不遮挡数据
- 时间标记:x轴自动生成关键日期标签(9月01、9月15等)
2.6 (分面折线图)
2.6.1 图形观察
- 分面策略:四只股票收盘价分面展示,ncol=2布局合理
- 日期处理:每月一个刻度(%b格式),标签旋转90度防重叠
- 高亮区间:9-10月用半透明蓝色背景突出显示
- 视觉优化:移除次要网格线,减少视觉干扰
2.7 (分面面积图)
2.7.1 图形观察
- 单位转换:成交量以”万手”为单位更符合阅读习惯
- 面积图优势:直观展示成交量累积效应
- 分面设计:各股票独立y轴尺度,避免小成交量被压制
- 标签处理:x轴标签旋转和间隔设置避免重叠
2.8 综合心得
数据过滤技巧:
filter(日期 >= "2024-9-1" & 日期 <= "2024-10-31")日期比较需确保格式一致,字符型日期也可直接比较
参考线应用:
geom_hline(yintercept=0, linetype="twodash")关键参考线能极大增强图表解读性
分面图最佳实践:
scale="free"解决量纲差异问题ncol=2平衡空间利用率与可读性- 共享x轴保持时间对齐
主题优化经验:
- 旋转标签时需同步调整hjust/vjust
element_blank()是简化视觉元素的利器- 图例位置需权衡数据遮挡与阅读流畅性
创新可视化:
geom_tshighlight实现区间高亮- 面积图对累积量展示效果突出
这些案例展示了如何针对不同分析目的(趋势对比、区间分析、累积量观察)选择最合适的图表类型,并通过ggplot2的丰富功能实现专业级的可视化效果。
3 流线图和地平线图
3.1 流线图
将四只股票的
交易额做作流线图,将四个面积图分面输出;将交易额的单位改为亿元
3.2 地平线图
- 采用
ggHoriPlot::geom_horizon函数,对四只股票的交易额做作地平线图 - 设置原点为均值
origin='mean',输出配色图例
3.3 图形观察和代码编写的心得体会
3.4 (流线图)
3.4.1 图形观察
- 数据展示:成功将四只股票(工商银行、贵州茅台、招商银行、中信证券)的成交额以流线图形式展示,单位转换为亿元
- 时间跨度:展示了2024年1月至2025年1月的完整年度数据
- 视觉特征:
- 流线图呈现波浪状形态,直观反映成交额波动
- 负值区域可能代表数据异常或特殊计算方式
- 颜色区分清晰,图例位于底部
3.5 (地平线图)
3.5.1 图形观察
- 新颖可视化:采用地平线图形式,通过颜色深浅和高度双重编码成交额
- 时间精度:按月显示,适合观察长期趋势
- 警告信息:提示ggplot2 3.4.0版本后
size参数已弃用,应改用linewidth
3.5.2 代码编写心得
- 版本兼容性:
- 需要注意ggplot2版本更新带来的语法变化
- 新代码应使用
linewidth替代size
- 可视化选择:
- 地平线图适合展示多组时间序列的对比
- 通过色带增强数据差异的可视化
- 优化方向:
- 可添加参考线或标记特殊事件点
- 考虑交互式实现以解决重叠问题
3.6 综合心得
创新可视化:流线图和地平线图都是传统折线图之外的有趣选择,能提供新的数据洞察视角
数据处理:
- 单位转换(亿元)增强了数据可读性
- 日期处理需要特别注意格式一致性
美学设计:
- 颜色方案选择影响多序列区分度
- 图例排版需要考虑系列数量和显示空间
调试经验:
- 警告信息往往提示重要问题,不应忽视
- 数据范围异常(如负成交额)需要特别检查
这些可视化展示了R在金融数据可视化方面的强大能力,特别是ggplot2生态系统配合扩展包(如ggstream)可以实现多种创新图表形式。
4 不规则时间序列图
4.1 数据准备
通过
zoo::rollmean时间收盘价的5天、10天和20天的移动平均将日期变量转化为
id变量
4.2 平滑曲线图
将四只股票收盘价和3种移动平均的折线图分面输出;
横轴的每隔30天一个刻度,只显示月/日;
4.3 K线图
选择工商银行数据作出,2024年的K线图
scale_x_continuous将横轴坐标刻度转化回日期型
4.4 图形观察和代码编写的心得体会
4.5 (分面折线图)
分面展示效果:成功将四只股票(工商银行、招商银行、贵州茅台、中信证券)的收盘价和移动平均线(MA5、MA10、MA20)分别展示在四个子图中,每个子图有自己的y轴刻度范围。
日期格式处理:x轴刻度每30天一个,格式化为”月-日”,清晰展示了时间趋势。
警告信息:有32行数据因缺失值或超出范围被移除,这是计算移动平均时常见的现象(前几日无法计算较长周期的移动平均)。
4.6 (K线图)
单只股票展示:专注于工商银行的K线图和移动平均线。
日期格式:使用了完整的”年-月-日”格式。
警告信息:不同移动平均线有不同数量的缺失值被移除(MA5:4行,MA10:9行,MA20:19行),这与移动平均的计算周期有关。
4.7 代码编写心得
- 数据整理技巧:
- 使用
gather()将收盘价和各移动平均线从宽格式转为长格式,便于ggplot绘制 - 使用
select()精心选择需要的列
- 使用
- 可视化技巧:
facet_wrap()实现了分面展示,scale="free"让每个子图有独立的y轴范围scale_x_continuous()配合breaks和labels参数精细控制x轴刻度guides(color="none")移除了不必要的图例
- 注意事项:
- 移动平均线计算会产生前N-1个NA值(N为窗口大小)
- 日期格式化需要考虑显示空间和可读性
- 分面图要注意各子图之间尺度是否可比
- 改进空间:
- 可以添加标题和轴标签增强可读性
- 考虑添加交易量作为副图
- 可以尝试用
cowplot或patchwork包更灵活地组合图表
这些图表很好地展示了如何使用R和ggplot2进行金融时间序列数据的可视化,特别是在处理多股票比较和移动平均线分析方面提供了很好的范例。