python金融与量化分析------Matplotlib(绘图和可视化)
-----------------------------------------------------------Matplotlib:绘图和可视化------------------------------------------------------------------------------
Matplotlib:---------------------------------------------------是一个强大的Python绘图和数据可视化的工具包
一:安装方法:------------------------------------------------pip install matplotlib
二:引用方法:------------------------------------------------import matplotlib.pyplot as plt
三:使用:
1:绘图函数:---------------------------------------------plt.plot()
2:显示函数------------------------------------------------plt.show()
3:plot函数:绘制折线图
----线型:------------------------------------------------(-,-.,--,..,-.,......等)
----点型:------------------------------------------------marker(v,^,s,*,H,+,X,D,o,......等)
----颜色:------------------------------------------------color(b,g,r,y,k,w,......等)
plot函数绘制多条曲线
pands包对plot的支持
4:Matplotlip:图像标注
----设置图像标题:----------------------------------------plt.title()
----设置x轴名称:-----------------------------------------plt.xlabel()
----设置y轴名称:-----------------------------------------plt.ylabel()
----设置x轴范围:-----------------------------------------plt.xlim()
----设置y轴名称:-----------------------------------------plt.ylim()
----设置x轴刻度:-----------------------------------------plt.xticks()
----设置y轴刻度:-----------------------------------------plt.yticks()
----设置曲线图例:-----------------------------------------plt.legend()
5:Matplotlib:画布与子图
----画布--------------------------------------------------figure
fig = plt.figure()
----图:--------------------------------------------------subplot
ax1 = fig.add subplot(2,2,1)
----调节子图间距:----------------------------------------subplots_adjust(left, bottom, right, top, wspace, hspace)
6:Matplotlib-支持的图类型
坐标图:--------------------------------------------------plt.plot(x,y,fmt,...)
箱型图:--------------------------------------------------plt.boxplot(data, notch, position)
条形图:--------------------------------------------------plt.bar(left,height,width,bottom)
横向条形图:----------------------------------------------plt.barh(width,bottom,left,height)
极坐标图:------------------------------------------------plt.polar(theta, r)
饼图:----------------------------------------------------plt.pie(data, explode)
功率谱密度图:--------------------------------------------plt.psd(x,NFFT=256,pad_to,Fs)
谱图:----------------------------------------------------plt.specgram(x,NFFT=256,pad_to,F)
X-Y相关性函数:-------------------------------------------plt.cohere(x,y,NFFT=256,Fs)
散点图:--------------------------------------------------plt.scatter(x,y)
步阶图:--------------------------------------------------plt.step(x,y,where)
直方图:--------------------------------------------------plt.hist(x,bins,normed)
7:Matplotlib——绘制K线图
matplotlib.finanace子包中有许多绘制金融相关图的函数接口。
绘制K线图:matplotlib.finance.candlestick_ochl函数
实例:
1:
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.show()
运行结果
你可能会很疑惑X和Y轴为什么是0~3和1~4。原因是这样的,这里我们只是为plot()命令提供
了一个list或者是array,matplotlib就会假设这个序列是Y轴上的取值,并且会自动为你生成X轴上的值。因为python中的范围是从0开始的,因此X轴就是从0开始,长度与Y的长度相同,也就是[0,1,2,3]。
plot()是一个灵活的命令,它的参数可以是任意数量,比如:
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
- 1
这表示的是(x,y)对,(1,1)(2,4)(3,9)(4,16)。这里有第三个可选参数,它是字符串格式的,表示颜色和线的类型。该字符串格式中的字母和符号来自于MATLAB,它是颜色字符串和线的类型字符串的组合。默认情况下,该字符串参数是’b-‘,表示蓝色的实线。
举一个使用红色圆圈绘制上述点集的例子:
import matplotlib.pyplot as plt
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()
可以查看plot()的文档,那里有完整的关于线的类型的说明。axis()命令可以方便的获取和设置XY轴的一些属性。
如果matplotlib仅限于使用上面那种list,那么它将显得毫无用处。通常,我们都是使用numpy数组,实际上,所有的序列都将被在内部被转化成numpy数字。下面的例子是使用一个命令用几种不同风格的线绘制一个数组:
import numpy as np
import matplotlib.pyplot as plt
# 0到5之间每隔0.2取一个数
t = np.arange(0., 5., 0.2)
# 红色的破折号,蓝色的方块,绿色的三角形
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()
控制线的属性
线有许多属性可以设置:线宽、线的形状,平滑等等。这里有一些设置线属性的方法:- 使用关键字参数
plt.plot(x,y,linewidth=2.0)
- 1
- 对线对象(Line2D)使用set_方法,plot()会返回一个线对象的列表,比如line1, line2 = plot(x1, y1, x2, y2)。下面的代码我们将假设我们只有一条线,即返回的线对象列表的长度为1。
line, = plt.plot(x, y, '-')
line.set_antialiased(False) # 关闭平滑- 1
- 2
- 使用setp()命令。 下面的例子使用的是MATLAB风格的命令去设置一个线的列表的多个属性。setp()可以作用于一个列表对象或者是一个单一的对象。你可以使用python风格的关键字参数或者是MATLAB风格的string/value对为参数:
lines = plt.plot(x1, y1, x2, y2) # 使用关键字 plt.setp(lines, color='r', linewidth=2.0) # 或者是MATLAB风格的string/value对 plt.setp(lines, 'color', 'r', 'linewidth', 2.0)
这是一些Line2D的属性和取值:
工作在多图形(figures)和多坐标系(axes)
MATLAB和pyplot都有当前图形(figure)和当前坐标系(axes)的概念。所有的绘图命令都是应用于当前坐标系的。gca()和gcf()(get
current
axes/figures)分别获取当前axes和figures的对象。通常,你不用担心这些,因为他们都在幕后被保存了,下面是一个例子,创建了两个子绘图区域(subplot):import numpy as np
import matplotlib.pyplot as plt def f(t):
return np.exp(-t) * np.cos(2*np.pi*t) t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02) plt.figure("2subplot")
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k') plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()figure()命令在这儿可以不写,因为figure(1)将会被默认执行,同样,subplot(111)也是默认被执行的。subplot()中的参数分别指定了numrows、numcols、fignum,其中fignum的取值范围为1到numrows*numcols,分别表示的是将绘图区域划分为numrows行和numcols列个子绘图区域,fignum为当前子图的编号。编号是从1开始,一行一行由左向右编号的。其实subplot中的参数【111】本应写作【1,1,1】,但是如果这三个参数都小于10(其实就是第三个参数小于10)就可以省略逗号。你可以创建任意数量的子图(subplots)和坐标系(axes)。如果你想手动放置一个axes,也就是它不再是一个矩形方格,你就可以使用命令axes(),它可以让坐标系位于任何位置,axes([left,bottom,width,height]),其中所有的值都是0到1(axes([0.3,0.4,0.2,0.3])表示的是该坐标系位于figure的(0.3,0.4)处,其宽度和长度分别为figure横坐标和纵坐标总长的0.2和0.3)。其实subplot和axes的区别就在于axes大小和位置更加随意。
你可以创建多个figure,通过调用figure(),其参数为figure的编号。当然每个figure可以包含多个subplot或者是多个axes。例子:import matplotlib.pyplot as plt
plt.figure(1) # 编号为1的figure
plt.subplot(211) # figure1中的第一个子图
plt.plot([1, 2, 3])
plt.subplot(212) # figure1中的第二个子图
plt.plot([4, 5, 6]) plt.figure(2) # figure2
plt.plot([4, 5, 6]) # 默认使用subplot(111),此时figure2为当
# 前figure plt.figure(1) # 设置figure1为当前figure;
# 但是subplot(212)为当前子图
plt.subplot(211) # 使subplot(211)为当前子图
plt.title('Easy as 1, 2, 3') # 对subplot(211)命名我们可以使用clf()和cla()(clear current figure/axes)清除当前figure和当前axes。
如果你创建了许多figures,你需要注意一件事:figure的内存直到显示调用close()函数才会被完全释放,否则它并没有被全部释放。如果只是删掉对figure的引用,或者是通过关闭window进程管理器关闭该figure,这都是不完全删除figure的,因为pyplot在内部维持了一个引用,直到close()被调用。文字
text()命令可以被用来在任何位置添加文字,xlabel()、ylabel()、title()被用来在指定位置添加文字。import numpy as np
import matplotlib.pyplot as plt mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000) # 直方图 n, bins, patches = plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75) plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()
所有text()命令返回一个matplotlib.text.Text实例,像上面的线一样,可以通过关键字参数在text()定制文本样式,也可以通过setp()来定制文字的样式:t = plt.xlabel('my data', fontsize=14, color='red')
setp(t,color='blue')- 1
- 2
- 在文本中使用数学表达式
matplotlib接受任何TeX方程表达式,比如,你可以写成用”$”符号包裹的TeX表达式:
plt.title(r'$\sigma_i=15$')
- 1
这里的”r”非常重要,它表示后面的字符串是一个纯粹的字符串,不会将后面的反斜杠当作转义字符。matplotlib内置有TeX表达式解释器和排版引擎,和自带的数学字体。因此你可以不用安装TeX就能使用数学表达式,如果你安装了LaTeX和dvipng,你也可以使用LaTex排版你的文字并且直接输出到figures或者是保存。
- 注释文本
使用text()命令可以在Axes中任意位置放置文本,一个普遍的文本用法是对一些特性进行注释,annotate()方法让添加注释变得很容易。对于注释有两点需要注意:需要被注释的地方,使用xy参数来指出,还有就是注释文本所放置的位置,使用参数xytext来指定位置,这两个参数都使(x,y)元组:
import numpy as np
import matplotlib.pyplot as plt ax = plt.subplot(111) t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = plt.plot(t, s, lw=2) plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
) plt.ylim(-2,2)
plt.show()
这里的xy和xytext所使用的坐标是根据XY轴的刻度的坐标,称为data coordinates。当然也可以使用其他坐标系统,具体参考官方文档。对数和其他非线性坐标轴(axis)
matplotlib.pylot不仅仅提供了线性的坐标,还提供了对数(logarithmic)和分对数(logit)坐标。当数据的维度跨越许多数量级时,这种坐标就很有用,改变坐标轴的刻度很容易:plt.xscale(‘log’)
下面是一个例子,对于同样的数据,在Y轴使用不同刻度下的曲线图:
import numpy as np
import matplotlib.pyplot as plt # 在区间[0,1]制造一些数据 # np.random.normal为高斯分布 y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y)) # 创建一个窗口 plt.figure(1) # 线性 plt.subplot(221)
plt.plot(x, y)
plt.yscale('linear')
plt.title('linear')
plt.grid(True) # 对数 plt.subplot(222)
plt.plot(x, y)
plt.yscale('log')
plt.title('log')
plt.grid(True) # symmetric log plt.subplot(223)
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthreshy=0.05)
plt.title('symlog')
plt.grid(True) # logit plt.subplot(224)
plt.plot(x, y)
plt.yscale('logit')
plt.title('logit')
plt.grid(True) plt.show()
实现一个最简单的plot函数调用:

1 import matplotlib.pyplot as plt
2
3 y=pp.DS.Transac_open # 设置y轴数据,以数组形式提供
4
5 x=len(y) # 设置x轴,以y轴数组长度为宽度
6 x=range(x) # 以0开始的递增序列作为x轴数据
7
8 plt.plot(x,y) # 只提供x轴,y轴参数,画最简单图形

图形输出结果类似于:
加入新方法:
plt.figure() :自定义画布大小
plt.subplot() :设置画布划分以及图像在画布上输出的位置

import matplotlib.pyplot as plt y=pp.DS.Transac_open # 设置y轴数据,以数组形式提供 x=len(y) # 设置x轴,以y轴数组长度为宽度
x=range(x) # 以0开始的递增序列作为x轴数据 #==============================
plt.figure(figsize=(8,8),dpi=80) # 画图之前首先设置figure对象,此函数相当于设置一块自定义大小的画布,使得后面的图形输出在这块规定了大小的画布上,其中参数figsize设置画布大小
plt.subplot(221) # 将figure设置的画布大小分成几个部分,参数‘221’表示2(row)x2(colu),即将画布分成2x2,两行两列的4块区域,1表示选择图形输出的区域在第一块,图形输出区域参数必须在“行x列”范围 ,此处必须在1和2之间选择——如果参数设置为subplot(111),则表示画布整个输出,不分割成小块区域,图形直接输出在整块画布上
plt.plot(y,xx) # 在2x2画布中第一块区域输出图形
plt.subplot(222)
plt.plot(y,xx) #在2x2画布中第二块区域输出图形
plt.show()
plt.subplot(223) #在2x2画布中第三块区域输出图形
plt.plot(y,xx)
plt.subplot(224) # 在在2x2画布中第四块区域输出图形
plt.plot(y,xx)
#============================== plt.plot(x,y) # 只提供x轴,y轴参数,画最简单图形

输出结果:
加入新方法:
plt.xticks():设置x轴刻度的表现方式
plt.xlim():设置x轴刻度的取值范围

1 import matplotlib.pyplot as plt
2 import numpy as nu
3
4 y=pp.DS.Transac_open # 设置y轴数据,以数组形式提供
5
6 x=len(y) # 设置x轴,以y轴数组长度为宽度
7 x=range(x) # 以0开始的递增序列作为x轴数据
8
9 plt.figure(figsize=(8,8),dpi=80) # 画图之前首先设置figure对象,此函数相当于设置一块自定义大小的画布,使得后面的图形输出在这块规定了大小的画布上,其中参数figsize设置画布大小
10 plt.subplot(111) # 将figure设置的画布大小分成几个部分,参数‘221’表示2(row)x2(colu),即将画布分成2x2,两行两列的4块区域,1表示选择图形输出的区域在第一块,图形输出区域参数必须在“行x列”范围 ,此处必须在1和2之间选择——如果参数设置为subplot(111),则表示画布整个输出,不分割成小块区域,图形直接输出在整块画布上
11 plt.plot(y,x)
12 #================================
13 plt.xlim(0,1000) # 设置x轴刻度范围,从0~1000
14 plt.ylim(0,20) # 设置y轴刻度的范围,从0~20
15
16 plt.xticks(nu.linspace(0,1000,15,endpoint=True)) # 设置x轴刻度
17 plt.yticks(nu.linspace(0,20,10,endpoint=True)) # 设置y轴刻度
18 #numpy.linspace()方法返回一个等差数列数组,第一个参数表示等差数列的第一个数,第二个参数表示等差数列最后一个数,第三个参数设置组成等差数列的元素个数,endpoint参数设置最后一个数是否包含在该等差数列。数列中相邻元素间的步长值为随机
19 如:nu.linspace(0,1000,15,endpoint=True)表示:第一个元素为0,最后一个数为1000,在这个 范围内,取15个值,构成一个等差数列,步长值随机,且1000包含在该数列中
20 #================================
21 plt.show()

图形输出结果:
修改plot方法,新加入参数:
plt.plot(y,xx,color='red',linewidth=2.5,linestyle='-') # color参数设置曲线颜色,linewidth设置曲线宽度,linestyle设置曲线风格
输出结果:
python金融与量化分析------Matplotlib(绘图和可视化)的更多相关文章
- python金融与量化分析----Jupyter Notebook使用
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言.在本文中,我们将介绍 Jupyter notebook 的主要特性,以 ...
- Python实战——基于股票的金融数据量化分析
说明:本文只是通过自己的已学知识对股票数据进行了一个简单的量化分析,只考虑了收盘情况,真实的量化交易中仅仅考虑收盘情况是不够的,还有很多的复杂因素,而且仅仅三年数据是不足以来指导真实的股票交易的,因此 ...
- python之金融与量化分析
一.金融 二.ipython 基础功能 ipython 快捷键
- Py修行路 Matplotlib 绘图及可视化模块
Matplotlib是一个强大的Python绘图和数据可视化的工具包. 安装方法:pip install matplotlib 引用方法:import matplotlib.pyplot as plt ...
- Matplotlib 绘图与可视化 一些属性和错误
属性 *)调整图像边缘及图像间的空白间隔plt.subplots.adjust(6个参数) 图像外部边缘的调整可以使用plt.tight_layout()进行自动控制,此方法不能够很好的控制图像间的间 ...
- Matplotlib 绘图与可视化 一些控件的介绍和属性,反正就是乱七八糟的
这个链接里有下面这个图(图里还有超链接):https://matplotlib.org/3.1.1/api/artist_api.html#matplotlib.artist.Artist 各种图例: ...
- Python金融应用编程(数据分析、定价与量化投资)
近年来,金融领域的量化分析越来越受到理论界与实务界的重视,量化分析的技术也取得了较大的进展,成为备受关注的一个热点领域.所谓金融量化,就是将金融分析理论与计算机编程技术相结合,更为有效的利用现代计算技 ...
- 大数据时代的Python金融应用-Day1-Python与金融应用概述
一.Python语言的主要特征 1.开源性 Python和大多数的支撑库和工具都是开源的,通常可以非常灵活的使用而且有开放的协议. 2.解释性 也可以使用Cpython完成将解释性语言转化为实施可执行 ...
- matplotlib绘图基本用法-转自(http://blog.csdn.net/mao19931004/article/details/51915016)
本文转载自http://blog.csdn.net/mao19931004/article/details/51915016 <!DOCTYPE html PUBLIC "-//W3C ...
随机推荐
- SublimeText SFTP连接Amazon EC2
文章最初发表于szhshp的第三边境研究所 转载请注明 1. SublimeText SFTP连接Amazon EC2 Sublime Text 3 正式版发布了,全平台IDE果断都换了. 今天终于有 ...
- 服务器能远程连接,网络连接正常,但是外网域名Ping不通,浏览器中打不开网站
服务器能远程连接成功,但在浏览器中打不开任何网站,出现这个问题一般是安装什么软件引起IE的相关设置做了变动或者是服务器中了病毒引起的,或是服务器的DNS设置是错误的. 一.先检查服务器DNS是否正确 ...
- JAVA和C#检测IP地址段是否交叉和获取地址段IP列表的方法
一.说明 我们经常编程时,需要对一个DIDR地段计算其可用IP地址,或者验证某个IP是否被包含在一个地址段中. 二.工具 1.Java 可以使用 cidr-ip-trie库解决. https://gi ...
- 解决MySQL8.0报错:Unknown system variable 'validate_password_policy'
一.问题描述 1.在安装MySQL8.0时,修改临时密码,因密码过于简单(如:123456),不符合MySQL密码规范,会触发一个报错信息: ERROR 1819 (HY000): Your pass ...
- 9.8 翻译系列:数据注解特性之--Required 【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/required-attribute-dataannotations-in-code-f ...
- Spring Boot 应用 发布到Docker
Spring Boot 应用 先把命令行切换到Maven项目的根目录 E:\gitCode\galaxyguardians 通过mvn clean package命令打包应用程序 ,在E:\gitCo ...
- 在view source页面保存下来的网页源码和保存网页得到的源码不同
前言 以前抓网页都是直接requests+bs4直接刚的,今天想拿一下拉钩的数据,就继续按照以下步骤来了: 先找个想爬的网页,然后写解析功能 批量爬,然后解析 入库 探究 结果发现行不通了,用bs4去 ...
- ESXi创建磁盘命令
[root@esx421 SAN]# vmkfstools -d thick -a lsilogic -c 10G lun00.vmdk Incorrect disk option "thi ...
- 【转】Centos7安装nodejs
下载及安装步骤: cd /usr/local wget https://nodejs.org/dist/v8.11.2/node-v8.11.2-linux-x64.tar.xz tar xvf no ...
- 【iCore4 双核心板_ARM】例程五:SYSTICK定时器 实验——定时点亮LED
实验原理: 通过STM32的三个GPIO口驱动三色LED的三个通道,设定GPIO为推挽输出模式,采 用灌电流方式与LED连接,输出高电平LED灭,输出低电平LED亮,通过系统定时器实现 1s定时,每秒 ...