Python学习第二课-----绘制股票K线图(不使用mpl

Python学习第二课-----绘制股票K线图(不使用mpl,第1张

1、序言

前文介绍了如何绘制分时图,可以用subplot()和add_axes(),不过各自都存在一定的缺陷,先保留疑问,今天先学习绘制K线图。

查了资料,以及各位大佬的方法,发现他们提供的绘制K线图都需要用到一个包,mpl_finance,而要调用这个包,相对有点麻烦,有些需要账号密码,有些需要购买。尝试了几次,未成功,也先留着疑问。办法总比困难多。今天介绍一种不用mpl_finance包绘制K线图的方法。

2、K线图绘制原理

单个K线图的主要构成包括开盘价Open,收盘价Close,最高价High,最低价Low,而在《Python学习第一课-----绘制股票分时图》一文中,我们已经可以通过get_price()函数得到这些数据,那么就可以,绘制K线图的数据就有了。

Python学习第一课-----绘制股票分时图_tnt1314的博客-CSDN博客

然后是绘制柱状图,Python可以使用bar()函数绘制柱状图,函数用法如下:

plt.bar(x, y, tick_label=x, width=0.6, bottom=open,color ='red')

x:X轴坐标数据;

y:Y轴坐标数据;

tick_label:X轴标识内容;

width:柱子宽度;

bottom:柱子底图;

color:柱子颜色;

2.1、绘制原理

我们将开盘价,收盘价分为1组,这组为柱状,width设置为0.6,最低价,最高价分为1组,这组为影线,width设置为0.1,然后绘制两个柱状图就可以合成K线图,

2.2、编写程序

还是以002466为例,时间周期为48天,获取数据程序为:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
plt.figure(figsize=(24,12))
dataframe1=get_price('002466.XSHE',end_date='2022-04-30',frequency='1d',count=48)

分别提取出其开盘价Open,收盘价Close,最高价High,最低价Low数组;

myc1=dataframe1['close']
myc2=dataframe1['open']
myc3=dataframe1['high']
myc4=dataframe1['low']

获取X轴与Y轴数据

x = np.arange(48)
y1= myc1 - myc2
y2= myc3 - myc4

设置柱子宽度

bar_width = 0.6
bar_width1 = 0.1

绘制两个柱状图

plt.bar(x, y2, tick_label='',width=bar_width1, bottom=myc4,color ='red')
plt.bar(x, y1, tick_label='',width=bar_width, bottom=myc2,color ='red')
plt.show()

2.3、运行结果

运行结果如下:

对比通达信K线图 

2.4、分析

通过对比发下,K线图的图形我们已经绘制出来,而且上下影线也正确,但存在一个问题,即无法辨别当日的开盘价和收盘价,也无法判断当日涨跌情况,因此还得处理。

3、绘制标准K线图

我们通过分解开盘价Open,收盘价Close,最高价High,最低价Low,然后绘制两组柱状图,可以得到有问题的K线图,但其形状以及数据都是正确的,那么我们再通过拆分,分别用不同的颜色绘制涨和跌的K线图,就可以得到准确的K线图

3.1、数组分拆

先得到4个数组,分别对应涨的柱状图y5,跌的柱状图y6,涨的影线图y7,跌的影线图y8,然后通过数据判断将原来的两个数组分拆,程序如下:

y5 = myc1 - myc2
y6 = myc1 - myc2
y7 = myc3 - myc4
y8 = myc3 - myc4
for k in range(48):
    if myc1[k]>myc2[k]:
        y5[k]=myc1[k]-myc2[k]
        y6[k]=0
        y7[k]=myc3[k]-myc4[k]
        y8[k]=0
    elif  myc1[k]==myc2[k]:
        y5[k]=0.02
        y6[k]=0
        y7[k]=myc3[k]-myc4[k]
        y8[k]=0
    else:
        y5[k]=0
        y6[k]=myc1[k]-myc2[k]
        y7[k]=0
        y8[k]=myc3[k]-myc4[k]

 3.2、绘制4个柱状图

数据得到后,用红色标识涨,绿色标识跌,程序如下:

plt.bar(x, y7, tick_label='', width=bar_width1, bottom=myc4,color ='red')
plt.bar(x, y5, tick_label='', width=bar_width, bottom=myc2,color ='red')
plt.bar(x, y8, tick_label='', width=bar_width1, bottom=myc4,color ='green')
plt.bar(x, y6, tick_label='', width=bar_width, bottom=myc2,color ='green')   
plt.show()

3.3、运行结果

运行结果与实际一致,完成K线图的绘制。

 4、综述

通过以上柱状图的组合,我们就可以将K线图绘制出来了。当然X轴的坐标标签问题依然存在,接下来学习的重点就是如何将X轴的坐标准确的标出。哈

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/797868.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存