K线图实战

K线图实战

使用pyecharts绘制k线图,优点多多。

一、原始数据

原始数据为csv文件,sh.000001号证券在过去一年内的日k线数据

六列分别为日期、证券编号、开盘价、最高价、最低价、收盘价

二、代码

0、代码实现

直接上代码,之后分段进行分析,部分内容和注释没什么用的,我懒得删了 😆

import pandas as pd
import numpy as np
from datetime import datetime
from pyecharts import options as opts
from pyecharts.charts import Kline

df1 = pd.read_csv('../stock_deal/excel_data/sh.000001_stodatek.csv')

li1 = list(df1)
df2=df1.values
df2 = df2.tolist()
date = []
data1 = []

for i in range(len(df2)):
    date.append(df2[i][0])
    data1.append([df2[i][2],df2[i][5],df2[i][4],df2[i][3]])
    #data1.append(df2[i][2:])


c = (
    Kline()
    .add_xaxis(date)
    .add_yaxis("sh.000001",
               data1,
               itemstyle_opts=opts.ItemStyleOpts(
                   color="#ec0000",
                   color0="#00da3c",
                   border_color="#8A0000",
                   border_color0="#008F28",
               ),
    )
    .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="sh.000001_Kline"),


    )
        .render("sh.000001_1.html")
)

以下是每个片段含义及其具体功能,可以不看

1、导入库

第2、3行没有用上

import pandas as pd
#import numpy as np
#from datetime import datetime
from pyecharts import options as opts
from pyecharts.charts import Kline
2、数据读取

使用pandas读取数据、读取为DF类型数据

df1 = pd.read_csv('../stock_deal/excel_data/sh.000001_stodatek.csv')
#print(df)
#DataFrame类型数据
3、数据处理

使用list()强制转换只会得到列名列表

df整体数据转列表,应先转为ndarray格式,在转为list格式

转array格式可以用.value,也可以用array()方法.

转list格式用.tolist()

#强制转,只存列名
li1 = list(df1)
#.values方法将dataframe转为numpy.ndarray,也可以用np.array(X)将其转为numpy.ndarray
df2=df1.values
#df2 = np.array(df1)
#将X转为list
df2 = df2.tolist()
print(df2[0])
print(type(df2))
time1 = df2[0][0]
print(time1,type(time1))

4、生成图片

查阅pyecharts绘制k线图所需参数、需求 open, close, lowest, highest、获取的数据为 open,high,low,close,适当调整

注释部分datazoom_opts=[opts.DataZoomOpts(pos_bottom="-2%")],是横坐标缩进条的设计

.add_xaxis、.add_yaxis x、y轴、上升下降颜色表示

生成文件为html文件

date = []

data1 = []
#遍历长度
#获取数据为 open,high,low,close
#pyec需求 open, close, lowest, highest
for i in range(len(df2)):
    date.append(df2[i][0])
    data1.append([df2[i][2],df2[i][5],df2[i][4],df2[i][3]])
    #data1.append(df2[i][2:])
print(date[0])
print(data1[0])
print(type(data1[0]))
'''
c = (
    Kline()
        .add_xaxis(date)
        .add_yaxis("kline", data1)
        .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(pos_bottom="-2%")],
        title_opts=opts.TitleOpts(title="Kline-DataZoom-slider-Position"),
    )
        .render(".html")
)
'''
c = (
    Kline()
    .add_xaxis(date)
    .add_yaxis("sh.000001",
               data1,
               itemstyle_opts=opts.ItemStyleOpts(
                   color="#ec0000",
                   color0="#00da3c",
                   border_color="#8A0000",
                   border_color0="#008F28",
               ),
    )
    .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="sh.000001_Kline"),


    )
        .render("sh.000001_1.html")
)

三、效果

参考文献

说明文档

基本图表 - pyecharts - A Python Echarts Plotting Library built with love.

总案例

Candlestick - Professional_kline_chart - Document (pyecharts.org)

坐标条案例

[Candlestick - Kline_datazoom_inside - Document (pyecharts.org)](https://gallery.pyecharts.org/#/Candlestick/kline_datazoom_ins

posted @ 2022-06-24 17:49  Saint_Z  阅读(288)  评论(0)    收藏  举报