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、运行结果
运行结果如下:
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轴的坐标准确的标出。哈