第七章 时间序列可视化课堂练习
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时间段高亮显示
2.3 面积图
将四只股票的
收盘价格做作面积图,将四个面积图分面输出;将成交量的单位改为万手
2.4 图形观察和代码编写的心得体会
2.4.0.1 折线图(涨跌幅趋势分析)
代码特点:
数据筛选:使用
dplyr进行日期范围筛选,确保数据集中在 2024-09-01 至 2024-10-31 之间。主题优化:
mytheme调整图例位置 (legend.position) 并移除背景 (legend.background),使图表更简洁。基准线:
geom_hline(yintercept = 0)添加水平线,帮助观察涨跌幅的正负变化。
图形观察:
可以直观对比不同股票/基金的涨跌幅趋势。
如果某条线长期低于 0,说明该资产在该时间段表现不佳;反之则表现较好。
适合用于多资产对比分析。
2.4.0.2 分面折线图(收盘价趋势分析)
代码特点:
分面绘图:
facet_wrap(~名称, ncol=2, scale="free")按资产名称分面,并允许各子图 y 轴独立缩放。x 轴优化:
scale_x_date调整日期显示格式(如%b只显示月份缩写)。axis.text.x旋转 90°,避免标签重叠。
高亮区间:
geom_tshighlight(需ggpol包)对特定时间段(2024-09-01 至 2024-10-31)进行背景高亮,突出关键区间。
图形观察:
分面图适合比较多个资产的独立趋势,避免线条重叠导致混乱。
高亮区间能快速识别特定时间段的价格波动(如政策发布期、财报季)。
如果某些资产收盘价波动剧烈,可能需要进一步分析异常原因。
2.4.0.3 面积图(成交量/成交额分析)
代码特点:
单位转换:
y=成交量/10000将原始数据转换为“万手”,提高可读性。面积图:
geom_area()展示成交量的累积趋势,适合观察市场活跃度。分面+自由刻度:
facet_wrap让不同资产的成交量独立显示,避免量纲差异影响观察。
图形观察:
面积图能直观反映市场交易活跃度,高峰区间可能对应重要事件(如财报、政策发布)。
如果某资产成交量长期低迷,可能流动性较差,需谨慎投资。
结合涨跌幅折线图,可分析“量价关系”(如放量上涨 vs. 缩量下跌)。
2.4.1 代码编写心得总结
数据清洗是关键:
使用
dplyr筛选、转换数据(如日期范围、单位换算)能让后续绘图更流畅。确保日期列是
Date类型,否则scale_x_date会报错。
分面图 (
facet_wrap) 的适用场景:当需要对比多个变量的趋势且 y 轴量纲差异大时,
scale="free"非常有用。但需注意分面过多可能导致图形拥挤,可调整
ncol或改用交互式绘图(如plotly)。
主题 (
theme) 优化技巧:移除网格线 (
panel.grid.minor=element_blank()) 让图表更简洁。旋转 x 轴标签 (
angle=90) 避免重叠,但需配合hjust/vjust微调位置。
扩展包的选择:
ggpol的geom_tshighlight能快速高亮时间区间,但需额外安装。类似效果也可用
annotate("rect", ...)实现,但代码稍复杂。
图形逻辑要清晰:
涨跌幅适合折线图 + 水平基准线(y=0)。
成交量/成交额适合面积图(强调累积效应)。
多资产对比优先分面,单资产分析可叠加图层。
3 流线图和地平线图
3.1 流线图
将四只股票的
交易额做作流线图,将四个面积图分面输出;将交易额的单位改为亿元
3.2 地平线图
- 采用
ggHoriPlot::geom_horizon函数,对四只股票的交易额做作地平线图 - 设置原点为均值
origin='mean',输出配色图例
3.3 图形观察和代码编写的心得体会
3.3.0.1 流线图(ggstream 成交额分析)
代码特点:
流线图 (
geom_stream):展示多资产成交额的流动趋势,适合观察资金流向的强弱变化。带宽调整 (
bw = 0.3):控制曲线的平滑度,值越小曲线越尖锐,值越大越平滑。图例优化:
legend.position="bottom"将图例置于底部,避免遮挡数据。guides(fill=guide_legend(nrow=2, title=NULL))让图例分两行显示,并移除标题,节省空间。
图形观察:
流线图能直观反映不同资产的成交额占比变化,适合观察市场资金的轮动效应。
如果某资产的流线宽度在某段时间显著增大,说明资金涌入(如政策利好或市场热点)。
适合对比多个资产的相对活跃度,但需注意 Y 轴为堆积比例,而非绝对值。
3.3.0.2 2. 地平线图(ggHoriPlot 成交额分析)
代码特点:
地平线图 (
geom_horizon):将时间序列数据压缩为横向色块,适合高密度数据可视化。origin='mean':以均值为基准线,高于均值的显示在上方,低于的显示在下方。horizonscale=10:将数据分成 10 个区间,颜色深浅代表幅度差异。
分面优化:
facet_grid(名称~.)垂直排列各资产,便于纵向对比。配色方案:
scale_fill_hcl(palette='RdYlBu')使用红-黄-蓝渐变,突出正负变化。
图形观察:
地平线图通过颜色和高度快速识别异常波动(如深色块代表成交额大幅偏离均值)。
适合长期趋势分析,能压缩大量数据到有限空间(如监控多资产全年表现)。
如果某资产颜色分布均匀,说明成交额稳定;若出现集中深色区,需结合事件分析原因。
3.3.1 代码编写心得总结
流线图 vs. 面积图:
流线图 (
ggstream) 强调流动感和比例变化,适合多资产对比。面积图 (
geom_area) 更侧重累积量,适合单一资产的绝对趋势分析。
地平线图的适用场景:
当时间序列数据过长时,地平线图能避免折线图的拥挤问题。
通过
horizonscale调整灵敏度,值越小对波动越敏感。
配色与主题优化:
流线图的填充色 (
fill=名称) 需避免颜色相近导致混淆。地平线图的
RdYlBu调色板能自然区分正负值(红=高,蓝=低)。
分面策略选择:
facet_wrap适合多资产横向排列,facet_grid适合纵向对比。分面时建议
scale="free"(流线图除外,因其本身已标准化)。
常见问题与解决:
流线图 Y 轴误导性:Y 轴为比例而非真实值,需在标题或注释中说明。
地平图色块不清晰:调整
horizonscale或改用origin='median'减少异常值影响。
4 不规则时间序列图
4.1 数据准备
通过
zoo::rollmean时间收盘价的5天、10天和20天的移动平均将日期变量转化为
id变量
4.2 平滑曲线图
将四只股票收盘价和3种移动平均的折线图分面输出;
横轴的每隔30天一个刻度,只显示月/日;
4.3 K线图
选择工商银行数据作出,2024年的K线图
scale_x_continuous将横轴坐标刻度转化回日期型
4.4 图形观察和代码编写的心得体会
4.4.1
代码特点:
数据转换:
使用
zoo::rollmean()计算 5/10/20 日均线(MA),align="right"确保当前点包含在均值计算中。gather()将收盘价和均线转为长格式,便于用color=指标区分线条。
分面优化:
facet_wrap(~名称, ncol=2, scale="free")独立显示各资产,避免量纲差异干扰。scale_x_continuous自定义 X 轴标签,显示日期(如"05-01"),避免默认数值索引不直观。
图形观察:
均线交叉策略:MA5 上穿 MA20 可能预示上涨趋势(金叉),反之(死叉)可能下跌。
趋势强弱:若收盘价持续高于均线,说明处于上升通道;若频繁穿越均线,则震荡明显。
分面对比:可快速识别哪些资产趋势稳定(如均线平行排列),哪些波动剧烈(如均线频繁交叉)。
改进建议:
添加
geom_vline(xintercept=关键事件日期)标记财报、政策等时间点,增强解释性。对震荡型资产,可叠加
geom_ribbon(aes(ymin=ma10, ymax=ma20), alpha=0.2)显示均线通道。
4.4.2 2. 单资产K线图(df2 工商银行)
代码特点:
K线绘制:
geom_segment画上下影线(最低价到最高价)。geom_rect画实体部分(开盘价到收盘价),用红/绿色填充区分涨跌(fill = 收盘 > 开盘)。
均线叠加:
- 通过
color参数区分 MA5/10/20,并手动指定颜色(蓝/橙/紫)。
- 通过
主题优化:
theme_minimal()保持简洁,legend.position="top"防止图例遮挡数据。
图形观察:
价格行为:长上影线(红色实体+长上影)可能预示抛压,长下影线(绿色实体+长下影)可能反映支撑。
均线支撑/阻力:若价格多次在 MA20 处反弹,该均线可能成为关键支撑位。
量价关系(若叠加成交量):放量突破均线时,信号更可靠。