pyecharts-3-绘制K线图

2021-03-01 16:12:40 浏览数 (1)

pyecharts-3-绘制K线图

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

什么是K线

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

K线(Candlestick chart)又称“阴阳烛”、“蜡烛线”,是反映价格走势的一种图线,其特色在于一个线段内记录了多项讯息,相当易读易懂且实用有效,广泛用于股票、期货、贵金属、数字货币等行情的技术分析,称为K线分析。 据传K线为日本江户时代的白米商人本间宗久所发明,用来记录每日的米市行情,研析期货市场。日语中K线称为“蜡烛足(日语:ローソク足)”。 蜡烛线的英文是candlestick chart,日文片假名为キャンドル スティック(KYANDORU SUTIKKU),故中文也称之为K线。

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

pyecharts格式

官网上数据的格式:

  • 每天的数据在一个列表
  • 全部的数据组成一个新的大列表
代码语言:javascript复制
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)

导入库

代码语言:javascript复制
import pymysql   # 连接数据库
import pandas as pd
import numpy as np
from pyecharts.charts import Kline,Line,Bar,Grid   -- 绘图
from datetime import datetime   #  处理时间

获取数据

原始数据

代码语言:javascript复制
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参数指定我们想要的格式
  • 通过匿名函数将上一步的时间数据再转成最终的时间格式数据
代码语言:javascript复制
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两个字段

个股数据量

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

代码语言:javascript复制
stock_list = df_stock['code'].value_counts().reset_index().rename(columns={'index':'code','code':'number'})
stock_list

000001-demo

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

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

代码语言:javascript复制
# 使用&,不要用and

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

生成列表类型数据

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

绘图

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

代码语言:javascript复制
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()

结果如下图:

0 人点赞