-----------------------------------------------------------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(绘图和可视化)的更多相关文章

  1. python金融与量化分析----Jupyter Notebook使用

    Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言.在本文中,我们将介绍 Jupyter notebook 的主要特性,以 ...

  2. Python实战——基于股票的金融数据量化分析

    说明:本文只是通过自己的已学知识对股票数据进行了一个简单的量化分析,只考虑了收盘情况,真实的量化交易中仅仅考虑收盘情况是不够的,还有很多的复杂因素,而且仅仅三年数据是不足以来指导真实的股票交易的,因此 ...

  3. python之金融与量化分析

      一.金融 二.ipython 基础功能 ipython 快捷键

  4. Py修行路 Matplotlib 绘图及可视化模块

    Matplotlib是一个强大的Python绘图和数据可视化的工具包. 安装方法:pip install matplotlib 引用方法:import matplotlib.pyplot as plt ...

  5. Matplotlib 绘图与可视化 一些属性和错误

    属性 *)调整图像边缘及图像间的空白间隔plt.subplots.adjust(6个参数) 图像外部边缘的调整可以使用plt.tight_layout()进行自动控制,此方法不能够很好的控制图像间的间 ...

  6. Matplotlib 绘图与可视化 一些控件的介绍和属性,反正就是乱七八糟的

    这个链接里有下面这个图(图里还有超链接):https://matplotlib.org/3.1.1/api/artist_api.html#matplotlib.artist.Artist 各种图例: ...

  7. Python金融应用编程(数据分析、定价与量化投资)

    近年来,金融领域的量化分析越来越受到理论界与实务界的重视,量化分析的技术也取得了较大的进展,成为备受关注的一个热点领域.所谓金融量化,就是将金融分析理论与计算机编程技术相结合,更为有效的利用现代计算技 ...

  8. 大数据时代的Python金融应用-Day1-Python与金融应用概述

    一.Python语言的主要特征 1.开源性 Python和大多数的支撑库和工具都是开源的,通常可以非常灵活的使用而且有开放的协议. 2.解释性 也可以使用Cpython完成将解释性语言转化为实施可执行 ...

  9. matplotlib绘图基本用法-转自(http://blog.csdn.net/mao19931004/article/details/51915016)

    本文转载自http://blog.csdn.net/mao19931004/article/details/51915016 <!DOCTYPE html PUBLIC "-//W3C ...

随机推荐

  1. redis内部数据结构深入浅出

    最大感受,无论从设计还是源码,Redis都尽量做到简单,其中运用到的原理也通俗易懂.特别是源码,简洁易读,真正做到clean and clear, 这篇文章以unstable分支的源码为基准,先从大体 ...

  2. 自己动手编译Linux内核

    2008年04月27日       整理了一下Linux内核编译的方法,原始内核版本为Linux-2.4.20.8,新内核版本为Linux-2.4.22,其它内核版本编译方法类似.     一 准备工 ...

  3. wkhtmlpdf安装以及中文乱码

    见此页http://www.cnblogs.com/day959/p/6652726.html

  4. iOS开发之Xcode9报错 Compiling IB documents for earlier than iOS7 is no longer supported.

    升级到Xcode9时,最低的编译版本为iOS8,但是在使用一些SDK的时候就会报出Compiling IB documents for earlier than iOS7 is no longer s ...

  5. java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁(转载)

    之前做过一个测试,详情见这篇文章<多线程 +1操作的几种实现方式,及效率对比>,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的: 1. 单线程下synchronized效率最高 ...

  6. Android webview clearHistory 不符合逾期的解决办法

    目前在业务开发中有这么一个需求,切换不同的 Fragment, 切换回 WebView 的Fragment时候,要求是打开的初始页面,然后我在 onHiddenChanged() 方法中加载默认地址, ...

  7. Atitit 数据融合merge功能v3新特性.docx

    Atitit 数据融合merge功能v3新特性.docx 1.1. 版本历史1 1.2. 生成sql结果1 1.3. 使用范例1 1.4. 核心代码1 1.1. 版本历史 V2增加了replace部分 ...

  8. Socket网络编程--聊天程序(3)

    上一小节,已经讲到可以每个人多说话,而且还没有限制,简单的来说,我们已经完成了聊天的功能了,那么接下来我们要实现什么功能呢?一个聊天程序至少应该支持一对多的通讯吧,接下来就实现多个客户端往服务器发送数 ...

  9. netbeans增加yii的代码提示

    在NetBeans中创建PHP项目 NetBeans目前还没有直接支持Yii Framework或Yii相关的插件,但是可以通过其他方式来实现Yii的代码自动提示. 首先,打开新建项目向导,创建一个“ ...

  10. npm和yarn的使用对比

    NPM YARN 说明 npm init yarn init 初始化某个项目 npm install/link yarn install/link 默认的安装依赖操作 npm install taco ...