一、前言

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绘制股票走势图相关推荐

  1. python画车辆轨迹图_如何利用 Python 绘制酷炫的 车辆轨迹 — 速度时空图?三维数据用二维图像呈现...

    说明:本文系交通攻城狮原创文章,如需转载请私信联系,侵权必究. 2020,第 30 期,编程笔记 建议直接阅读精编版:如何利用 Python 绘制酷炫的 车辆轨迹 - 速度时空图?三维数据用二维图像呈 ...

  2. python制作雷达图_如何利用Python matplotlib绘制雷达图

    本篇文章介绍使用matplotlib绘制雷达图. 雷达图也被称为网络图,蜘蛛图,星图,蜘蛛网图,是一个不规则的多边形.雷达图可以形象地展示相同事物的多维指标,雷达图几乎随处可见,应用场景非常多. 一. ...

  3. python画矩阵热图_如何用python的matplotlib绘制热图

    python使用matplotlib绘制热图 python常用的绘图库就是matplotlib,今天在给公司绘图时,偶然间发现matplotlib可以绘制热图,并且十分简洁,拿出来跟大家分享一下.(由 ...

  4. python分态密度图_学术干货丨能带结构和态密度图的绘制及初步分析

    [能带结构绘图和初步分析] 1.1能带简介 在形成分子时,原子轨道构成具有分立能级的分子轨道.晶体是由大量的原子有序堆积而成的.由原子轨道所构成的分子轨道的数量非常之大,以至于可以将所形成的分子轨道的 ...

  5. python绘制基因结构图_从 gff 到 gggenes 绘制基因结构图

    gffutils 是一个用来解析 gff 文件的 Python 包,可以十分方便地获取 gff 文件中的相关信息.gggenes 是 ggplot2 的扩展包,用于绘制基因结构图.多物种基因比较图的很 ...

  6. python绘制pr曲线图_如何利用Python制作可以动的动态图表。

    来源:机器之心 原文链接:https://towardsdatascience.com/learn-how-to-create-animated-graphs-in-python-fce780421a ...

  7. 如何使用python做图_如何使用python做动图

    python可以做动图吗 ImageMagick 是一套功能强大.稳定而且开源的工具集和开发包,可以用来读.写和处理超过200种基本格式的图片文件,包括PNG,JPEG,GIF,HEIC,TIFF,D ...

  8. 怎么用python读取excel图_如何用Python读取Excel中图片?

    公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...

  9. python绘制爱心气球_菲菲用python编程绘制的父亲节礼物

    原标题:菲菲用python编程绘制的父亲节礼物 爱心热气球 菲菲说带着爸爸一起坐热气球 绘制此图菲菲一共写了60行代码 视频动画 Turtle 库 命令 说明 turtle.forward(dista ...

  10. python做实时温度曲线图_Python学习记录 - matplotlib绘制温度变化折线图

    Python学习记录 - matplotlib绘制温度变化折线图 Python学习记录 - matplotlib绘制温度变化折线图 题目:列表a表示10点到12点每一分钟的气温,累计为2个小时,绘制折 ...

最新文章

  1. #论文 《Deep Residual Learning for Image Recognition》
  2. 做算法题时的一些小技巧
  3. centos6.2系统使用扩展源epel报错问题解决方法
  4. Spring AOP 应用篇
  5. 刚刚,阿里开源 iOS 协程开发框架 coobjc!
  6. base64转file图片上传
  7. Android Lazy url
  8. XML与Web Service基础知识点
  9. python点操作符语法,Python 语法之操作符和表达式
  10. 轻量级的实现复制文本到剪贴板功能的 js
  11. PAT A 1065. A+B and C (64bit) (20)
  12. 无人编辑,人工智能编辑,AI编辑机器人-资讯频道编辑
  13. 基于GMT绘制行政区划图
  14. USB Server远程连接USB实现方式
  15. 每日一记—Android动态申请多个权限
  16. vue3知识点:Suspense组件
  17. 计算机数据表格方框,excel表格数据变框框了-Excel表格弄着弄着突然变成这样了,内容方框全无,有......
  18. python有参函数和无参函数的区别_构造函数的有参和无参的区别,构造函数的参数是派什么用场的?...
  19. hadoop SWAP交换空间
  20. 微信小程序 -- 原生JS集成腾讯IM实时聊天/实时音视频(踩坑及心得)

热门文章

  1. 【汇正财经】什么是复盘?
  2. 《C语言编程魔法书:基于C11标准》——1.6 本章小结
  3. 第 8 章 管线以及管线状态管理
  4. MacOS下使用UClient
  5. 心田花开:请重视情商教育的重要性!
  6. 股票入门基础知识13:股票基本面分析(概述)
  7. USB协议[转]__总结得很好
  8. 批量爬QQ用户信息,利用QQ查询功能进行获取QQ用户信息
  9. 二叉查找树——清华大学计算机系 郭家宝
  10. Free Nas搭建