楼主: cheetahfly
7485 8

[程序分享] 如何用polygon画时间序列的“高亮”图 [推广有奖]

  • 2关注
  • 72粉丝

版主

已卖:1份资源

院士

11%

还不是VIP/贵宾

-

威望
0
论坛币
63967 个
通用积分
1679.3337
学术水平
489 点
热心指数
598 点
信用等级
336 点
经验
127404 点
帖子
2099
精华
1
在线时间
3984 小时
注册时间
2010-10-27
最后登录
2026-1-2

楼主
cheetahfly 在职认证  发表于 2015-10-28 14:06:57 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我在用R语言进行A股数据分析时,对于某些特定的市场特征,需要用“高亮”将某些特定的A股运行区间凸显出来,以便更加直观地观察规律,进一步分析,在作图之前,我的脑海中设想的是这样的:(引自:张丹,两条均线打天下)
poly-ts01.png
牛人张丹使用ggplot2包编程实现的上图,我目前还没有系统学习ggplot2的语法和用法,于是,我想能否用polygon画阴影的方法简单实现我的目标呢?我尝试了一下,发现polygon似乎不支持时间序列。我在百度上搜索,中文网站上没有查到相关的解决办法,于是我改用bing搜索,在两个国外网站上发现了类似的问题,并且对应的解决办法。
总的来说,polygon确实不直接支持时间序列,解决方法主要是将时间序列变为一般向量,然后先用plot画图,再用polygon画阴影,再将x轴的坐标画上,我结合他们的代码和我的要求,示范代码如下:
  1. library(quantmod)
  2. getSymbols("^GSPC")
  3. x<-Cl(GSPC)  # 将收盘价提取出来
  4. vx<-as.vector(x)  # 再向量化一份
  5. begin <- which(index(x)=="2010-01-20")  #开始时间
  6. end <- which(index(x)=="2012-08-20") #结束时间
  7. # 以下作图
  8. plot(as.vector(x),type = "l", xaxt="n")  #这里注意xaxt参数,作用是不画x轴标签
  9. polygon(c(begin,begin:end,end), c(0,vx[begin:end],0),col = "red")
  10. axis(1,at = seq(1,length(vx),length.out = 12), labels = index(x)[seq(1,length(vx),length.out = 12)])  #补画x轴坐标
复制代码
图效果如下:
poly-ts02.png
我个人更喜欢这种简单清爽的图,更加能够便于自己观察。

我用这种方法研究A股的实际效果如下:
poly-ts03.png



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:polygon 时间序列 poly 如何用 quantmod 如何

已有 1 人评分热心指数 收起 理由
happy_287422301 + 2 精彩帖子

总评分: 热心指数 + 2   查看全部评分

沙发
zhou1_20 发表于 2016-4-28 23:25:03
你好,你这种带方框的代码怎么发,我一直都是复制粘贴的感觉比较乱

藤椅
cheetahfly 在职认证  发表于 2016-4-29 07:47:52
zhou1_20 发表于 2016-4-28 23:25
你好,你这种带方框的代码怎么发,我一直都是复制粘贴的感觉比较乱
answer.png
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
zhou1_20 + 5 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
xiao974257400 发表于 2016-10-25 19:50:08
请问  你知道你新增的那些阴影的面积如何求么

报纸
cheetahfly 在职认证  发表于 2016-10-26 07:58:37
xiao974257400 发表于 2016-10-25 19:50
请问  你知道你新增的那些阴影的面积如何求么
阴影范围内每一天的指数相加,再乘以单位时间t即可。

地板
xiao974257400 发表于 2016-10-26 18:59:27
cheetahfly 发表于 2016-10-26 07:58
阴影范围内每一天的指数相加,再乘以单位时间t即可。
每一天的指数相加是啥意思?  求这面积有具体的程序或函数么?谢谢

7
cheetahfly 在职认证  发表于 2016-10-27 17:28:27
xiao974257400 发表于 2016-10-26 18:59
每一天的指数相加是啥意思?  求这面积有具体的程序或函数么?谢谢
上面的图放大后的精确来说应该是这样子的:
计算面积.png
根据微积分的原理,面积=指数1 * t + 指数2 * t + ...+指数n * t = (指数1 + 指数2 + ... + 指数n) * t

8
樱井慕心 发表于 2016-11-23 09:57:59
楼主图画的不错,学习了

9
anztlan 发表于 2017-8-20 15:43:48
学习了 很厉害

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 13:39