Fork me on GitHub

pyecharts-3-绘制K线图

pyecharts-3-绘制K线图

本文中记录一次利用pyecharts绘制K线图。最近从朋友那边获取到一组关于stock的数据,于是抽空画了一下K线图,熟悉pyecharts中K线图的画法

什么是K线

引用一段来自维基百科的解释:

K线(Candlestick chart)又称“阴阳烛”、“蜡烛线”,是反映价格走势的一种图线,其特色在于一个线段内记录了多项讯息,相当易读易懂且实用有效,广泛用于股票期货贵金属数字货币等行情的技术分析,称为K线分析

据传K线为日本江户时代白米商人本间宗久所发明,用来记录每日的米市行情,研析期货市场。日语中K线称为“蜡烛足(日语:ローソク足)”。

蜡烛线的英文是candlestick chart,日文片假名为キャンドル スティック(KYANDORU SUTIKKU),故中文也称之为K线。

自己的理解就是根据每个股每天的:开盘价、最低价、最高价和收盘价绘制的一种走势图线,从中找出个股的规律

pyecharts格式

官网上数据的格式:

  • 每天的数据在一个列表
  • 全部的数据组成一个新的大列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from pyecharts import options as opts
from pyecharts.charts import Kline

data = [
[2320.26, 2320.26, 2287.3, 2362.94],
[2300, 2291.3, 2288.26, 2308.38],
[2295.35, 2346.5, 2295.35, 2345.92],
[2347.22, 2358.98, 2337.35, 2363.8],
[2360.75, 2382.48, 2347.89, 2383.76],
]

c = (
Kline()
.add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)])
.add_yaxis("kline", data)
.set_global_opts(
xaxis_opts=opts.AxisOpts(is_scale=True),
yaxis_opts=opts.AxisOpts(
is_scale=True,
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
datazoom_opts=[opts.DataZoomOpts(type_="inside")],
title_opts=opts.TitleOpts(title="Kline-DataZoom-inside"),
)
.render("kline_datazoom_inside.html")
)
点击复制 (Click to Copy)错误 (Error)复制 (Copy)

导入库

1
2
3
4
5
import pymysql   # 连接数据库
import pandas as pd
import numpy as np
from pyecharts.charts import Kline,Line,Bar,Grid -- 绘图
from datetime import datetime # 处理时间

获取数据

image-20200902000319583

原始数据

1
2
3
4
5
6
7
data = []

for i in cur.fetchall():
data.append(i)

df_stock = pd.DataFrame(data,columns=['ts_code','trade_date','open','close','low','high'])
df_stock

时间转化

在pyecharts中绘制K线图的时候,时间格式使用的是年-月-日的格式,所以需要先对上面的数据进行处理。

上面的数据只是字符串类型:

  • 使用to_datetime()方法转化成时间类型的数据,format参数指定我们想要的格式
  • 通过匿名函数将上一步的时间数据再转成最终的时间格式数据
1
2
3
df_stock['trade_date'] = pd.to_datetime(df_stock['trade_date'], format ='%Y-%m-%d')

df_stock['trade_date'] = df_stock['trade_date'].apply(lambda x: x.strftime('%Y-%m-%d'))

划分代码和证券交易所

将股票代码和证券交易所的代号分开

使用匿名函数和分割函数进行处理,取出相应的数据,增加codeexchange两个字段

个股数据量

查看每个股在规定时间范围内的数据量

1
2
stock_list = df_stock['code'].value_counts().reset_index().rename(columns={'index':'code','code':'number'})
stock_list

000001-demo

以深证的000001股票为例绘制K线图,下图为数据量:

指定在某个时间段内绘制:

1
2
3
4
# 使用&,不要用and

df_kline = kline[(kline['trade_date'] >= '2020-01-10') & (kline['trade_date'] <= '2020-02-04')]
df_kline

生成列表类型数据

open、close、low、high的4个数据放在一个列表,代表一天的完整数据,再将每天的数据组成新的大列表。

绘图

将上面得到的完整数据导入官网的代码示例中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
c = (
Kline()
.add_xaxis(df_kline['trade_date'].tolist())
.add_yaxis("kline", data_list)
.set_global_opts(
xaxis_opts=opts.AxisOpts(is_scale=True),
yaxis_opts=opts.AxisOpts(
is_scale=True,
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
title_opts=opts.TitleOpts(title="K线走势图"),
)
)

c.render_notebook()

结果如下图:

本文标题:pyecharts-3-绘制K线图

发布时间:2020年09月02日 - 00:09

原始链接:http://www.renpeter.cn/2020/09/02/pyecharts-3-%E7%BB%98%E5%88%B6K%E7%BA%BF%E5%9B%BE.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea