zoukankan      html  css  js  c++  java
  • python 金融应用(三)数据可视化

      matplotlib 库( http://www.matp1otlìb.org )的基本可视化功能。

     主要是2-D绘图、金融绘图和3-D绘图

    一.2-D绘图

    1.1一维数据集

    #导入所需要的包
    import
    matplotlib as mpl import numpy as np import matplotlib.pyplot as plt
    np.random.seed(1000)
    y=np.random.standard_normal(20)   #生成20个正太分布随机数
    x=range(len(y))  #简单的绘图
    plt.plot(x,y)

      其实,不需要输入x参数也可以绘图,因为plot 会注意到何时传递了ndarray 对象。在这种情况下,没有必要提供x 值的"额外"信息, 如果你只提供y 的, plot 以索') I 值作为对应的x 值、因此,下面一行代码会生成完全一样的输出。

    plt.plot(y)

    还可以传递附加方法:

    plt.plot(y.cumsum())  #对y的累计求和

     还可以操作细节,

    plt.plot(y.cumsum())
    plt.grid(True)   #添加表格
    plt.axis('tight') #显示x轴的全刻度
    plt.xlim(-1,20)   #规定x轴最大、最小值
    plt.ylim(np.min(y.cumsum())-1,np.max(y.cumsum())+1)
    plt.show()

    plt.axis具体参数:

    Empty :返回 当前坐标轴限值
    off :关闭做标轴线相标签
    equal :使用等刻度
    scalcd :通过尺寸变化平衡刻度
    tight :使所有 数据可见{缩小限值)
    Image: 使所有数据可见(使用数据限值)
    [xmin、xmax, ymin, ymax] :将设置限定为给定(一组)值

    plt.figure(figsize=(12,8))
    plt.plot(y.cumsum(),'b',lw=1.5)
    plt.plot(y.cumsum(),'ro')
    plt.grid(True)
    plt.axis('tight')
    plt.xlabel('index')
    plt.ylabel('value')
    plt.title('A simple picture')
    plt.show()

    颜色

    可以通过调用matplotlib.pyplot.colors()得到matplotlib支持的所有颜色。

    别名颜色别名颜色
    b 蓝色 g 绿色
    r 红色 y 黄色
    c 青色 k 黑色 
    m 洋红色 w 白色

     

     

     

    线条标记

    标记maker描述标记描述
    ‘o’ 圆圈 ‘.’
    ‘D’ 菱形 ‘s’ 正方形
    ‘h’ 六边形1 ‘*’ 星号
    ‘H’ 六边形2 ‘d’ 小菱形
    ‘_’ 水平线 ‘v’ 一角朝下的三角形
    ‘8’ 八边形 ‘<’ 一角朝左的三角形
    ‘p’ 五边形 ‘>’ 一角朝右的三角形
    ‘,’ 像素 ‘^’ 一角朝上的三角形
    ‘+’ 加号 ‘’ 竖线
    ‘None’,’’,’ ‘ ‘x’ X

     

     

     

     

     

    用来该表线条的属性

    风格linestyle或ls描述线条风格linestyle或ls描述
    ‘-‘ 实线 ‘:’ 虚线 
    ‘–’ 破折线 ‘None’,’ ‘,’’ 什么都不画 
    ‘-.’ 点划线  

     

     

    1.2  二维数据集

    np.random.seed(2000)
    y=np.random.standard_normal((20,2)).cumsum(axis=0)  #axis=0 按列累加求和
    
    plt.figure(figsize=(8,6))
    plt.plot(y,lw=1.5)
    plt.plot(y,'ro')
    plt.grid(True)
    plt.axis('tight')
    plt.xlabel('index')
    plt.ylabel('value')
    plt.title('A simple plot')
    plt.show()

     

    添加图例

    plt.figure(figsize=(8,6))
    plt.plot(y[:,0],lw=1.5,label='1st')
    plt.plot(y[:,1],lw=1.5,label='2st')
    plt.plot(y,'ro')
    plt.grid(True)
    plt.axis('tight')
    plt.xlabel('index')
    plt.ylabel('value')
    plt.legend(loc=0)
    plt.title('A simple plot')
    plt.show()

    图例位置参数: 

    plt.legend(loc='’)

    0: ‘best'
    1: ‘upper right'
    2: ‘upper left'
    3: ‘lower left'
    4: ‘lower right'
    5: ‘right'
    6: ‘center left'
    7: ‘center right'
    8: ‘lower center'
    9: ‘upper center'
    10: ‘center'

     

     

    使用双坐标轴

    y[:,0]=y[:,0]*100
    fig,ax1=plt.subplots(figsize=(8,6))
    plt.plot(y[:,0],'c',lw=1.5,label='1st')
    plt.plot(y[:,0],'ro')
    plt.legend(loc=8)

    ax2=ax1.twinx()    #添加另一个坐标轴
    plt.plot(y[:,1],lw=1.5,label='2st')
    plt.plot(y[:,1],'ro')

    plt.grid(True)
    plt.axis('tight')
    plt.xlabel('index')
    plt.ylabel('value')
    plt.legend(loc=0)
    plt.title('A simple plot')
    plt.show()

    画两个子图plt.figure(figsize=(8,6))

    plt.figure(figsize=(8,6))
    plt.subplot(211)  #2x1 第一个子图
    plt.plot(y[:,0],'c',lw=1.5,label='1st')
    plt.plot(y[:,0],'ro')
    plt.legend(loc=0)
    
    plt.subplot(212)   #两行一列 第二个子图
    plt.plot(y[:,1],'g',lw=1.5,label='2st')
    plt.plot(y[:,1],'ro')
    plt.legend(loc=0)
    
    plt.grid(True)
    plt.axis('tight')
    plt.xlabel('index')
    plt.ylabel('value')
    plt.title('A simple plot')
    plt.show()

    不同种类的两个子图

    plt.figure(figsize=(8,6))
    plt.subplot(211)
    plt.plot(y[:,0],'c',lw=1.5,label='1st')
    plt.plot(y[:,0],'ro')
    plt.legend(loc=0)
    plt.grid(True)
    plt.axis('tight')
    plt.xlabel('index')
    plt.ylabel('value')
    plt.title('1 dataset')

    plt.subplot(212)
    plt.bar(np.arange(len(y)),y[:,1],color='g',width=0.5,label='2st')  #条形图

    plt.legend(loc=0)

    plt.grid(True)

    plt.axis('tight')
    plt.xlabel('index')
    plt.ylabel('value')
    plt.title('2nd dataset')
    plt.show() 

    其他绘图样式

    散点图

    np.random.seed(2000)
    y=np.random.standard_normal((2000,2))
    
    plt.figure(figsize=(8,6))
    plt.scatter(y[:,0],y[:,1])
    plt.grid(True)
    plt.xlabel('1 data')
    plt.ylabel('2 data')
    plt.show()

    plt.figure(figsize=(8,6))
    plt.plot(y[:,0],y[:,1],color='r',marker='o')
    plt.grid(True)
    plt.xlabel('1 data')
    plt.ylabel('2 data')
    plt.show()

    scatter 绘图函数可以加入第三维,通过不同的颜色进行可视化.并使用彩条加以描述。为此,我们用随机数据生成第三个数据集,这次使用的是0 和10 之间的整数:

     展示的散点图有不同颜色小点表示的第三维,还有作为颜色图例的影条:

    c = np.random.randint(0, 10, len(y))
    plt.figure(figsize=(7,5))
    plt.scatter(y[: , 0], y [ : , 1] , c=c , marker ='o')
    plt.colorbar()
    plt.grid(True)
    plt.xlabel('lst')
    plt.ylabel('2nd')
    plt.title('Scatter Plot')

    直方图

    plt.figure(figsize=(7,4))
    plt.hist(y,label=['1st','2en'],bins=20)  #bins=20 代表分为20组
    plt.legend(loc=0)
    plt.grid(True)
    plt.xlabel('index')
    plt.ylabel('value')
    plt.show()

    详解hist函数

       matplotlib.pyplot.hist(  
        x, bins=10, range=None, normed=False,   
        weights=None, cumulative=False, bottom=None,   
        histtype=u'bar', align=u'mid', orientation=u'vertical',   
        rwidth=None, log=False, color=None, label=None, stacked=False,   
        hold=None, **kwargs)  

    参数描述:
    x :列表对象 ndarray 对象
    bins: 数据组( bin )数
    range: 数据组的下界和上界
    nonned :规范化为整数1
    weights: x 轴上每个值的权重
    cumulative: 每个数据组包含较低组别的计数
    hisstype :选项(字符串): ar, barstacked, step、stepfìlled
    align: 选项(字符串): left, mid, righl
    onentatlon: 选项(字符串): horizontal, vertical
    rwideth:条块的相对宽度
    log :对数刻度
    color :每个数据集的颜色(类似数组)
    label :标签所用的字符串或者字符串序列
    stacked :堆叠多个数据集

    两个数据集的数据在直方图的堆叠,只需要修改hist中参数:

    plt.figure(figsize=(7,4))
    plt.hist(y,label=['1st','2en'],bins=20)
    plt.legend(loc=0)
    plt.grid(True)
    plt.xlabel('index')
    plt.ylabel('value')
    plt.show()

    箱型图

    fig,ax=plt.subplots(figsize=(7,4))
    plt.boxplot(y)
    plt.setp(ax,xticklabels=['1st','2nd'])             #    设置(一组)图表的实例的属性
    plt.grid(True)
    plt.xlabel('value')
    plt.ylabel('fre')
    plt.show()

    data=np.random.standard_normal(20)
    lin=plt.plot(data,'r')
    plt.setp(lin,linestyle='-')
    plt.show()

    将线的样式更改为"短划线" 

    生成积分曲线

    #1:积分函数
    def fun(x):
        return 0.5*np.exp(x)+1
    
    #2:定义积分区
    a,b=0.5,1.5
    x=np.linspace(0,2)
    y=fun(x)
    
    #3:绘制函数图像
    fig,ax=plt.subplots(figsize=(7,4))
    plt.plot(x,y,'r',lw=1.5)
    plt.ylim(ymin=0)
    
    from matplotlib.patches import Polygon
    #4:使用Polygon 函数生成阴影部分(‘补丁’),表示积分面积:
    Ix=np.linspace(a,b)
    Iy=fun(x)
    verts=[(a,0)]+ list(zip(Ix,Iy)) +[(b,0)] #zip把列表转化为元组l1= [1,2,3]  l2=[2,3,4]  lsit(zip(l1,l2))=[(1,2),(2,3),(3,4)]
    poly = Polygon(verts, facecolor ='0.9',edgecolor='0.1')
    ax.add_patch(poly)
    
    
    plt.text(0.5 * (a + b) , 1, r"$int_a^b f(x)mathrm{d}x$" ,horizontalalignment='center' , fontsize=20)
    plt.figtext(0.9, 0.075, '$X$')
    plt.figtext(0.075, 0.9, '$f(x)$')
    
    ax.set_xticks((a, b))
    ax.set_xticklabels(('$a$' , '$b$' ))
    ax.set_yticks( [ fun(a) , fun(b)])
    ax . set_yticklabels(('$f(a)$' , '$f(b)$'))
    plt.grid(True)
    plt.show()

    二 .3-D绘图

    strike = np.linspace(50, 150, 24)
    ttm = np.linspace(0.5, 2.5, 24)
    strike, ttm = np.meshgrid(strike, ttm)
    
    
    iv = (strike - 100) ** 2 / (100 *strike) / ttm
    # generate fake implied νolatilities
    
    from mpl_toolkits.mplot3d import Axes3D
    
    fig = plt.figure(figsize=(9, 6))
    ax = fig.gca(projection='3d')
    surf = ax.plot_surface(strike, ttm, iv, rstride=2 , cstride=2,
    cmap=plt.cm.coolwarm, linewidth=0.5,
    antialiased=True)
    ax.set_xlabel('strike')
    ax.set_ylabel('time-to-maturity')
    ax.set_zlabel('implied volatility')
    fig.colorbar(surf, shrink=0.5, aspect=5)
    plt.show()

    plot_surface 参数

    X, Y, Z :2D 数组形式的数据值
    rstride :数组行距(步长大小)
    cstride: 数组列距(步长大小)
    color: 曲面块颜包
    cmap: 曲面峡颜色映射
    facecolors :单独曲面块表面'颜包
    norm :将值映射为颜色的Normalize 实例
    Vmin:映射的最小值
    vmax :映射的最大值

     还有可以用view_init 设置不同的视角:

    fig = plt.figure(figsize=(8, 5))
    ax = fig.add_subplot(111,projection='3d')
    ax.view_init(30, 60)
    ax.scatter(strike, ttm, iv, zdir='z' , s=25,
    c='b' , marker='^')
    ax.set_xlabel('strike')
    ax.set_ylabel('time-to-maturity')
    ax.set_zlabel('implied volatili ty')
    plt.show()

  • 相关阅读:
    使用jquery的 $.grep实现es6的filter效果
    web移动前端页面,jquery判断页面滑动方向
    js for循环与for in循环的区别
    jq判断滚动条向上还是向下
    react中的hoc和修饰器@connect结合使用
    creat-react-app 如何在组件中img的src引入图片路径??
    react将字符串转义成html语句
    POJ 3905 Perfect Election (2-Sat)
    POJ 2296 Map Labeler (2-Sat)
    HDU Bomb Game 3622 (2-Sat)
  • 原文地址:https://www.cnblogs.com/jin-liang/p/9017425.html
Copyright © 2011-2022 走看看