python 画k线_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_list

def 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()

你可能感兴趣的:(python,画k线)