第七章 时间序列可视化课堂练习
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 图形观察和代码编写的心得体会
合并折线图
可视化效果:多股涨跌幅折线图通过动态曲线展现金融产品波动轨迹,零基准线(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”)精准匹配个股量级差异,无图例设计依赖分面标题实现标识
核心技巧:
实时单位转换:
y=成交量/10000在美学映射中直接转换单位,避免创建新变量分面隔离:
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)):图例单行排列
地平线图
图形观察心得
图表类型:这是地平线图,用一行行彩色条带表示不同股票的每日成交额变化。
颜色含义:
颜色深浅代表成交额相对于平均值的偏离程度。
高于平均值的日子用暖色(如红、黄),低于平均值的用冷色(如蓝)。
偏离越大,颜色越深。
布局:每只股票的数据占据一行,上下排列,方便同时比较多只股票。
优点:这种图非常节省空间,能清晰显示成交额的高峰(暖色深)和低谷(冷色深)时期。
整体效果:一眼就能看出不同股票在什么时间段成交活跃或清淡。
代码编写心得
关键函数:
geom_horizon()负责画出彩色条带。重要设置:
origin='mean':以平均值作为判断高低的分界线。horizonscale=10:把高低差异分成10个等级,用不同深浅颜色表示。
数据处理:代码只选取了日期、股票名称和成交额这三项数据。
分面显示:
facet_grid(名称~.)让每只股票的数据独占一行。美化:使用了简洁的主题 (
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 图形观察和代码编写的心得体会
平滑曲线图
图形观察心得
分面折线图展示多股技术指标(收盘价/均线)走势
颜色区分不同指标(收盘价、MA5/MA10/MA20)
横轴优化:日期标签按月-日格式显示,间隔30天
独立纵轴:各股价格分面展示,适应不同价格区间
代码编写要点
数据转换:
gather()合并收盘价/均线列→长格式创建
指标列区分数值类型
核心绘图:
geom_line(size=0.8)绘制粗线增强可视性scale_x_continuous()定制日期标签格式
布局设计:
隐藏图例(
guides(color="none"))双列分面(
facet_wrap(ncol=2))自由Y轴(
scale="free")适配股价差异
k线图
图形观察心得
K线图结构:
竖线段表示每日股价波动范围(最高-最低)
矩形框表示开盘收盘区间(红涨绿跌)
技术指标叠加:
蓝色MA5(5日均线)
橙色MA10(10日均线)
紫色MA20(20日均线)
视觉优化:
日期标签按月-日格式显示
顶部图例标注均线含义
红绿颜色区分涨跌直观
代码编写要点
核心图层:
geom_segment:绘制最高-最低价影线geom_rect:绘制开盘-收盘实体(红涨绿跌)geom_line:三条均线叠加
颜色映射:
scale_fill_manual:红/绿填充K线实体scale_color_manual:三色区分均线
坐标优化:
scale_x_continuous:30天间隔标签pmin/pmax:智能计算实体位置
布局精简:
theme_minimal:简洁背景legend.position="top":图例顶部水平排列guides(fill="none"):隐藏涨跌图例(颜色自解释)