楼主: cheetahfly
7290 10

[学习分享] 用ggplot2画的常用K线图 [推广有奖]

  • 2关注
  • 71粉丝

版主

院士

5%

还不是VIP/贵宾

-

威望
0
论坛币
58587 个
通用积分
1406.4471
学术水平
480 点
热心指数
587 点
信用等级
328 点
经验
126326 点
帖子
2063
精华
1
在线时间
3767 小时
注册时间
2010-10-27
最后登录
2024-4-22

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
首先,为什么要用ggplot2来画K线图,不是有quantmod包和chartSeries()等函数吗?
这是因为:第一,quantmod包的画图对我来说没有足够的灵活性,我不能很自如地控制每一个要素,添加我想要的东西;第二,quantmod包的分析是基于xts的时间序列对象,而在日常工作中,已经习惯了用tbl_df体系,也确实好用,而该体系的作图对应的就是ggplot2这一强大的工具。
好了,不说废话了,直接开始。
数据是2017年上证综指每日的开盘,最高,最低、收盘和成交量数据,在这个文件中,变量名"SHDX2017"。
SHDX2017.rar (7.79 KB) 本附件包括:
  • SHDX2017.RData

开始作图:
  1. library(tidyverse)
  2. library(gridExtra)
  3. library(quantmod)  # 要用到SMA函数

  4. # 为了解决日期作为横坐标会出现休市日的情况,需要以下的变量辅助
  5. row_len <- nrow(SHDX2017)
  6. breaks <- seq(1, row_len, 10)
  7. labels <- SHDX2017$date[breaks]

  8. # 作K线图
  9. p1 <- SHDX2017 %>%
  10.   arrange(date) %>%
  11.   mutate(ma5 = SMA(close, n = 5, align =  "right"),
  12.          ma10 = SMA(close, n = 10, align = "right"),
  13.          date_axis = row_number()) %>%
  14.   ggplot(aes(x = date_axis)) +
  15.   geom_boxplot(aes(lower = pmin(close, open),
  16.                    middle = close,
  17.                    upper = pmax(close, open),
  18.                    ymin = low,
  19.                    ymax = high,
  20.                    group = date_axis,
  21.                    fill = open > close),
  22.                stat = "identity",
  23.                show.legend = FALSE) +
  24.   geom_line(aes(y = ma5), color = "blue3") +
  25.   geom_line(aes(y = ma10), color = "red") +
  26.   scale_x_continuous(breaks = breaks,
  27.                      labels = NULL,
  28.                      expand = c(0, 0)) +
  29.   theme(axis.ticks.x = element_blank(),
  30.         axis.title = element_blank(),
  31.         axis.text.y = element_text(margin = margin(l = 8)))

  32. # 作成交量图
  33. p2 <- SHDX2017 %>%
  34.   arrange(date) %>%
  35.   mutate(vol_ma5 = SMA(volume, n = 5, align =  "right"),
  36.          vol_ma10 = SMA(volume, n = 10, align = "right"),
  37.          date_axis = row_number()) %>%
  38.   ggplot(aes(x = date_axis, y = volume)) +
  39.   geom_bar(stat = "identity",
  40.            aes(fill = open > close),
  41.            show.legend = FALSE) +
  42.   geom_line(aes(y = vol_ma5), color = "blue3") +
  43.   geom_line(aes(y = vol_ma10), color = "red") +
  44.   scale_x_continuous(breaks = breaks,
  45.                      labels = format(labels, "%m-%d"),
  46.                      expand = c(0, 0)) +
  47.   scale_y_continuous(expand = c(0, 0.5)) +
  48.   theme(axis.title = element_blank())

  49. # 组合
  50. grid.arrange(p1, p2, nrow = 2, heights = 2:1)
复制代码

作出的图像这样:
candleStikcs.png


二维码

扫码加我 拉你入群

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

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

关键词:ggplot2 gplot plot GPL K线图

已有 2 人评分学术水平 热心指数 信用等级 收起 理由
tulipsliu + 5 + 5 + 5 精彩帖子
Sunknownay + 3 + 3 + 3 精彩帖子

总评分: 学术水平 + 8  热心指数 + 8  信用等级 + 8   查看全部评分

沙发
allain 在职认证  发表于 2018-1-30 14:33:20 |只看作者 |坛友微信交流群
楼主厉害!

使用道具

藤椅
allain 在职认证  发表于 2018-1-30 14:51:33 |只看作者 |坛友微信交流群
请问楼主,数据是怎么获得的?

使用道具

板凳
cheetahfly 在职认证  发表于 2018-1-30 14:59:18 |只看作者 |坛友微信交流群
allain 发表于 2018-1-30 14:51
请问楼主,数据是怎么获得的?
我是用的收费的Wind。
不过,用通达信等免费软件在K线图键入34,也可以导出。

使用道具

报纸
allain 在职认证  发表于 2018-1-30 15:04:14 |只看作者 |坛友微信交流群
cheetahfly 发表于 2018-1-30 14:59
我是用的收费的Wind。
不过,用通达信等免费软件在K线图键入34,也可以导出。
好的,谢谢

使用道具

地板
zhangok 发表于 2018-2-18 15:08:16 |只看作者 |坛友微信交流群
相当不错,非常受用!

使用道具

7
无恤 在职认证  发表于 2019-4-15 16:29:17 |只看作者 |坛友微信交流群
谢谢楼主分享。不过有个问题,如何把图示(legend)加上?

使用道具

8
13801889358 发表于 2021-2-28 20:41:04 |只看作者 |坛友微信交流群
楼主真棒,我基于xts的data现在用楼主的代码在尝试,但是还是出现了双休日,节假日,停牌日的间隔,这个楼主通过前面三行代码究竟是怎么消除的呀?

使用道具

9
13801889358 发表于 2021-2-28 20:53:32 |只看作者 |坛友微信交流群
13801889358 发表于 2021-2-28 20:41
楼主真棒,我基于xts的data现在用楼主的代码在尝试,但是还是出现了双休日,节假日,停牌日的间隔,这个楼主 ...

使用道具

10
cheetahfly 在职认证  发表于 2021-3-1 07:44:03 |只看作者 |坛友微信交流群
13801889358 发表于 2021-2-28 20:41
楼主真棒,我基于xts的data现在用楼主的代码在尝试,但是还是出现了双休日,节假日,停牌日的间隔,这个楼主 ...
把日期直接作为1/2/3/4....这样的序列

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 11:08