matplotlib使用自己的数据绘制k线图

来源:转载

其他教程里的k线图都是使用的tushare等现成的库获取数据后直接使用matplotlib.finance.candlestick_ochl绘制图形,但是对于使用自己的数据的情况并没有详细的说明.


下面从我的代码中摘要部分重点,第一部是包的导入,如果matplotlib.pyplot .show()不能显示图形的话,要在导入 matplotlib.pyplot 之前,导入matplotlib之后执行 matplotlib.use('TkAgg') ,TkAgg是使用tkinter的图形界面


import datetime
from tkinter import *
import pandas as pd
import numpy as np
import matplotlib
matplotlib.use('TkAgg')# 处理图形不显示的问题,要在导入 matplotlib.pyplot 之前
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.finance as mpf

下面的函数是把datetime类型的数据转换为绘制图形所需的类型.


datetime2matplotlib_np_array(data_datetime) #data_datetime是numpy.array类型, datetime2matplotlib(data_datetime) #data_datetime是list类型


def datetime2matplotlib(data_list):
"""
把 data_list 中的 datetime 类型的数据转换为 matplotlib 的轴所需的格式
:param data_list: list,只有一个 datetime 类型元素
:return: list
"""
for index, i in enumerate(data_list):
data_list[index] = mpf.date2num(datetime.datetime.strptime(i, "%Y-%m-%d %H:%M:%S"))
return data_listdef datetime2matplotlib_np_array(np_array):
"""
把 numpy 中的datetime 类型的数据转换为 matplotlib 的轴能使用的类型
:param np_array: numpy.array,只有一个 datetime 类型元素
:return:
"""
for line_no, line in enumerate(np_array):
# 把日期整理成所需的类型
datetime_field = line[0]
datetime_field = datetime.datetime.strptime(datetime_field, "%Y-%m-%d %H:%M:%S")
np_array[line_no][0] = mpf.date2num(datetime_field)
return np_array

使用candlestick_ochl把kline_data绘制出来.


如果要在k线上附近均线等和价格对应的数据,要使用ax_kline.twiny() 共享y轴,这样只有均线和k线的运距条数一样,y轴就能正常共享坐标了,实现了正常的k线图表.


# 绘制k线
mpf.candlestick_ochl(ax_kline, kline_data, width=0.6, colorup='red', colordown='green', alpha=1.0)
# ax_kline.xaxis.set_major_locator(mdates.DayLocator(bymonthday=range(1, 32), interval=15))# 设置x轴间隔
ax_kline.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))# 格式化X轴的时间
for label in ax_kline.xaxis.get_ticklabels():
label.set_rotation(45)# 旋转x轴
# k线上附加绘制均线
ax_ma5 = ax_kline.twiny()# 共享y轴
ax_ma5.plot(data_datetime, data_ma5, linewidth=1, linestyle="-", color="blue")
ax_ma10 = ax_kline.twiny()# 共享y轴
ax_ma10.plot(data_datetime, data_ma10, linewidth=1, linestyle="-", color="#00ff00")
plt.grid(True)# 显示网格
plt.show()

分享给朋友:
您可能感兴趣的文章:
随机阅读: