用python绘制股票图_【转】使用Python matplotlib绘制股票走势图
一、前言
matplotlib【1】是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图。本人在工作过程中涉及到股票数据的处理如绘制K线等,因此将matplotlib的使用心得进行整理,与大家共同分享。
另外,在数据处理过程中会用到numpy【2】,matplotlib网站的示例也有不少用到了numpy,读者可以参考这篇文章【3】有基本的了解。
本系列文章主要分为两部分:(1)matplotlib基本使用;(2)结合股票走势、技术指标等信息通过matplotlib进行绘制,学习其用法,个人觉得matplotlib博大精深,二八定理,20%的功能完成80%的图表需求。
最后,matplotlib作者英年早逝,感谢他所做出的贡献。John Hunter will be missed!
二、matplotlib基本使用
matplotlib中通过pyplot模块进行图表的绘制。所绘制的图表称为一个绘图对象,在绘图对象之上绘制各种图形。由于K线图主要是基于日期和股票价格的X-Y坐标轴结构,因此本系列文章也主要针对axes坐标轴绘制进行分析。
通过如下语句导入需要绘图的库:
import matplotlib.pyplot as plt
1. figure对象
figure对象可以看成整个图表。在figure图表之上增加多个子图,然后在子图之上绘制点和线。
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
得到fig对象之后,通过add_subplot增加子图(返回了一个axes坐标轴),该方法需要三个参数,分别为:numrows, numcols, fignum。其中,一共有numrows*numcols个子图,即:将图表分为N行*M列,fignum标识了该子图的顺序,其范围从1到numrows*numcols。在上例中1,1,1表示了该绘图对象仅有1个子图,也就是1*1类型。
2. plot方法绘图
创建子图之后,通过plot方法在子图上绘制。plot方法可以传入两个list,分别表示X和Y坐标,因此x和y的长度要一致。需要注意的是,plot也可以接受一个list参数作为Y坐标的值,默认X坐标的值从0开始到Y的长度。
plt.plot([1,2,3,4])
其中X坐标为0到3,个数与Y坐标值的数目相同。
plt.plot([1,2,3,4], [1,2,3,4])
设置了X坐标的值。然后通过plot.show()显示该图,示例代码如下:
def PlotDemo1():
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3,4],[2,3,4,5])
plt.show()
图表如下所示:
上述图表作为基础,以后我们都是围绕这个基础图表不断添加元素,直到达到我们想要的效果。
2.1 增加标题和坐标轴说明
如果需要给绘图对象增加标题,可以通过suptitle方法设置,其中可以设置参数:标题、标题字体大小、字体类型等。代码示例如下:
fig.suptitle('figure title demo', fontsize = 14, fontweight='bold')
如果需要对给定子图的坐标轴设置标题,可以通过刚才返回的axes对象的set_title进行设置,代码示例如下:
ax.set_title("axes title")
如果需要对于X和Y坐标设置标签,可以通过set_xlabel和set_ylabel方法设置。代码示例如下:
ax.set_xlabel("x label") ax.set_ylabel("y label")
图表如下所示:
通过上述的示例,我们绘制了一个基本的X和Y坐标轴,并增加了针对坐标轴的说明。
三、股价基本走势图
股票的K线图(以日K为例)由日期和价格组成,形成X-Y坐标轴,按照前面的绘图方案,需要传入日期数组和价格数组即可。
1.numpy数组
numpy是常用的数据处理库,我将000001.SZ的股价数据(时间范围从20150101到20150930)导入到csv中,然后通过numpy读取得到日期和价格数组。csv文件中包含了两列,日期和价格,分割符号为",",读取过程代码如下:
dates, close = np.loadtxt(filename,delimiter=",", unpack= True, converters={0:mdates.strpdate2num('%Y-%m-%d')})
numpy的loadtxt方法:设定了文件中的分隔符号为“,”,unpack是否将数组拆分,True为拆分,即:得到两个数组分别表示日期和收盘价格,converters是将日期类型的字符串转为数组,因为numpy规定其数组中的类型需要一致。
2.绘制基础走势图
通过numpy得到日期和收盘价格之后,参照先前的示例,通过plot方法进行绘制:
ax1.plot(dates,close)
图表如下所示:
在上图中,x轴通过数值标识,而不是日期类型。因为我们通过numpy构造数组时,日期按照数值类型存储,可以通过如下方法转换为日期类型:
ax1.xaxis.set_major_locator(mdates.DayLocator(bymonthday=range(1,32), interval=15))
ax1.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
for label in ax1.xaxis.get_ticklabels():
label.set_rotation(45)
X-轴设置主要刻度locator为每日刻度,格式为:DateFormatter("%Y-%m-%d"),每日刻度从第1日到第31日,间隔为15日。图表如下所示:
其中,对于X-轴上面的每个ticker标签都向右倾斜45度,这样标签不会重叠在一起便于查看。
也可以按照每月进行显示,X-轴设置主要刻度为每月刻度,格式为:DateFormatter("%Y-%m"),转换代码如下:
ax1.xaxis.set_major_locator(mdates.MonthLocator())
ax1.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m"))
图表如下所示:
3.图形边框调整
细心的读者可能会发现,在上图中底部(bottom)处的日期标签,显示不完整。此时可以点击【configure subplots】按钮,调整左右和上下边框,然后保存即可。图表如下所示:
也可以通过subplots_adjust方法对于边框进行调整:
plt.subplots_adjust(bottom=0.13,top=0.95)
4.绘制价格平均线
在前面的示例中绘制了基本的股票走势图,本节我们利用ta-lib【4】证券技术指标库,绘制5日和10日价格平均线。
ta-lib中提供了方法talib.SMA得到价格简单平均线,timeperiod为时间参数,timeperiod=5为五日均线,基于上图增加五日和十日均线,代码如下:
sma5 = talib.SMA(close, timeperiod = 5)
ax1.plot(dates,sma5)
sma10 = talib.SMA(close, timeperiod = 10)
ax1.plot(dates,sma10)
其中,sma5和sma10均为numpy数组。
图表如下所示:
在坐标轴中有三条曲线,matplotlib会自动改变线条颜色,此时如果没有说明并不方便使用,可以在右上角增加图例,表明各线条所代表的含义,并增加图表的网格效果,代码如下:
plt.legend(('daily', 'SMA5', 'SMA10'))
plt.grid(True)
图表如下所示:
四、总结
本章对于matplotlib的基本使用方法进行了介绍,并绘制了基本的股票价格和均线走势图。在后面的章节中对于上述图表增加成交量、MACD值等数据。
最后还是那句俗得不能再俗的话,“本人水平有限,错误在所难免,欢迎批评指正。”
用python绘制股票图_【转】使用Python matplotlib绘制股票走势图相关推荐
- python画车辆轨迹图_如何利用 Python 绘制酷炫的 车辆轨迹 — 速度时空图?三维数据用二维图像呈现...
说明:本文系交通攻城狮原创文章,如需转载请私信联系,侵权必究. 2020,第 30 期,编程笔记 建议直接阅读精编版:如何利用 Python 绘制酷炫的 车辆轨迹 - 速度时空图?三维数据用二维图像呈 ...
- python制作雷达图_如何利用Python matplotlib绘制雷达图
本篇文章介绍使用matplotlib绘制雷达图. 雷达图也被称为网络图,蜘蛛图,星图,蜘蛛网图,是一个不规则的多边形.雷达图可以形象地展示相同事物的多维指标,雷达图几乎随处可见,应用场景非常多. 一. ...
- python画矩阵热图_如何用python的matplotlib绘制热图
python使用matplotlib绘制热图 python常用的绘图库就是matplotlib,今天在给公司绘图时,偶然间发现matplotlib可以绘制热图,并且十分简洁,拿出来跟大家分享一下.(由 ...
- python分态密度图_学术干货丨能带结构和态密度图的绘制及初步分析
[能带结构绘图和初步分析] 1.1能带简介 在形成分子时,原子轨道构成具有分立能级的分子轨道.晶体是由大量的原子有序堆积而成的.由原子轨道所构成的分子轨道的数量非常之大,以至于可以将所形成的分子轨道的 ...
- python绘制基因结构图_从 gff 到 gggenes 绘制基因结构图
gffutils 是一个用来解析 gff 文件的 Python 包,可以十分方便地获取 gff 文件中的相关信息.gggenes 是 ggplot2 的扩展包,用于绘制基因结构图.多物种基因比较图的很 ...
- python绘制pr曲线图_如何利用Python制作可以动的动态图表。
来源:机器之心 原文链接:https://towardsdatascience.com/learn-how-to-create-animated-graphs-in-python-fce780421a ...
- 如何使用python做图_如何使用python做动图
python可以做动图吗 ImageMagick 是一套功能强大.稳定而且开源的工具集和开发包,可以用来读.写和处理超过200种基本格式的图片文件,包括PNG,JPEG,GIF,HEIC,TIFF,D ...
- 怎么用python读取excel图_如何用Python读取Excel中图片?
公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...
- python绘制爱心气球_菲菲用python编程绘制的父亲节礼物
原标题:菲菲用python编程绘制的父亲节礼物 爱心热气球 菲菲说带着爸爸一起坐热气球 绘制此图菲菲一共写了60行代码 视频动画 Turtle 库 命令 说明 turtle.forward(dista ...
- python做实时温度曲线图_Python学习记录 - matplotlib绘制温度变化折线图
Python学习记录 - matplotlib绘制温度变化折线图 Python学习记录 - matplotlib绘制温度变化折线图 题目:列表a表示10点到12点每一分钟的气温,累计为2个小时,绘制折 ...
最新文章
- #论文 《Deep Residual Learning for Image Recognition》
- 做算法题时的一些小技巧
- centos6.2系统使用扩展源epel报错问题解决方法
- Spring AOP 应用篇
- 刚刚,阿里开源 iOS 协程开发框架 coobjc!
- base64转file图片上传
- Android Lazy url
- XML与Web Service基础知识点
- python点操作符语法,Python 语法之操作符和表达式
- 轻量级的实现复制文本到剪贴板功能的 js
- PAT A 1065. A+B and C (64bit) (20)
- 无人编辑,人工智能编辑,AI编辑机器人-资讯频道编辑
- 基于GMT绘制行政区划图
- USB Server远程连接USB实现方式
- 每日一记—Android动态申请多个权限
- vue3知识点:Suspense组件
- 计算机数据表格方框,excel表格数据变框框了-Excel表格弄着弄着突然变成这样了,内容方框全无,有......
- python有参函数和无参函数的区别_构造函数的有参和无参的区别,构造函数的参数是派什么用场的?...
- hadoop SWAP交换空间
- 微信小程序 -- 原生JS集成腾讯IM实时聊天/实时音视频(踩坑及心得)