zoukankan      html  css  js  c++  java
  • 数据可视化包

           Matplotlib

    1,Matplotlib - 介绍

     Matplotlib是一个强大的Python绘图和数据可视化的工具包。

    # 安装方法
    pip install matplotlib
    # 引用方法
    import matplotlib.pyplot as plt
    
    # 绘图函数
    plt.plot()
    # 显示图像
    plt.show()

    这里可以使用jupyter,ipython notebook桌面解释器来运行matplotlib。

    # 安装jupyter
    !pip3 install jupyter
    
    # 运行notebook
    jupyter notebook

    # 然后new一个python3文件,并且可以保存多种格式。

    2,plot函数-绘制图像

    plot函数:绘图函数。回值点图或线图,具体使用ipython: plt.plot?

    # 这些属性可以不标示,直接写入引号里面即可。
    #线型 linestyle(-,-.,--,...) #点型 marker(v, ^, s, *, H, +, x, D, o,...) # o代表圆实点, #颜色 color(b, g, r, y, k, w, ...)

    如图:

    3,Matplotlib - 图像标注

    Matplotlib - 图像标注
    设置图像标题 plt.title() 设置y轴范围 plt.ylim()
    设置x轴名称 plt.xlabel() 设置x轴刻度 plt.xticks()
    设置y轴名称 plt.ylabel() 设置y轴刻度 plt.yticks()
    设置x轴范围 plt.xlim() 设置曲线图例 plt.legend()

    代码示例一:调整名字和间隔

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 图像一:
    # 使用np.linspace定义x:范围是(-3,3);个数是50. 仿真一维数据组(x ,y1)表示曲线1. 仿真一维数据组(x ,y2)表示曲线2.
    x = np.linspace(-3, 3, 50)
    y1 = 2*x + 1
    y2 = x**2
    
    # 使用plt.figure定义一个图像窗口. 使用plt.plot画(x ,y2)曲线. 
    # 使用plt.plot画(x ,y1)曲线,曲线的颜色属性(color)为红色;曲线的宽度(linewidth)为1.0;曲线的类型(linestyle)为虚线.
    # 使用plt.title定义标题,使用label定义线条名称,使用plt.legend()显示定义线条
    plt.figure()
    plt.plot(x, y2, label = 'Line A')
    plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--', label = 'Line B')
    # legend将要显示的信息来自于上面代码中的 label. 所以我们只需要简单写下一下代码, plt 就能自动的为我们添加图例.
    plt.legend(loc='lower right') 
    
    # 使用plt.xlim设置x坐标轴范围:(-1, 2); 使用plt.ylim设置y坐标轴范围:(-2, 3); 
    # 使用plt.xlabel设置x坐标轴名称:’I am x’;使用plt.ylabel设置y坐标轴名称:’I am y’;
    plt.xlim((-1, 2)) 
    plt.ylim((-2, 3)) 
    plt.xlabel('I am x') 
    plt.ylabel('I am y') 
    plt.show() 
    
    # 图像二:
    # 使用np.linspace定义范围以及个数:范围是(-1,2);个数是5. 使用print打印出新定义的范围. 
    # 使用plt.xticks设置x轴刻度:范围是(-1,2);个数是5.
    
    new_ticks = np.linspace(-1, 2, 5)
    plt.xticks(new_ticks)
    plt.title('Temper')
    
    # 使用plt.yticks设置y轴刻度以及名称:刻度为[-2, -1.8, -1, 1.22, 3];
    # 对应刻度的名称为[‘really bad’,’bad’,’normal’,’good’, ‘really good’]. 使用plt.show显示图像.
    plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really bad$', r'$bad$', r'$normal$', r'$good$', r'$really good$'])
    # plt.yticks(np.arange(0,10,2),['a','b','c','d','e','f'])
    plt.show()

    详解legend函数

    plt.legend(loc='lower right')表示右下方

    如果我们想单独修改之前的 label 信息, 给不同类型的线条设置图例信息. 我们可以在 plt.legend 输入更多参数. 如果以下面这种形式添加 legend, 我们需要确保, 在上面的代码 plt.plot(x, y2, label='linear line') 和 plt.plot(x, y1, label='square line') 中有用变量 l1 和 l2 分别存储起来. 而且需要注意的是 l1, l2,要以逗号结尾, 因为plt.plot() 返回的是一个列表.

    plt.legend(handles=[l1, l2], labels=['up', 'down'],  loc='best')

    这样我们就能分别重新设置线条对应的 label 了.

    其中’loc’参数有多种,’best’表示自动分配最佳位置,其余的如下:

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

    总结果如图所示:

    代码示例二:调整坐标轴

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(-3, 3, 50)
    y1 = 2*x + 1
    y2 = x**2
    
    plt.figure()
    plt.plot(x, y2)
    plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
    plt.xlim((-1, 2))
    plt.ylim((-2, 3))
    
    new_ticks = np.linspace(-1, 2, 5)
    plt.xticks(new_ticks)
    plt.yticks([-2, -1.8, -1, 1.22, 3],['$really bad$', '$bad$', '$normal$', '$good$', '$really good$'])
    # 使用plt.gca获取当前坐标轴信息. 使用.spines设置边框:右侧边框;使用.set_color设置边框颜色:默认白色; 
    # 使用.spines设置边框:上边框;使用.set_color设置边框颜色:默认白色;
    
    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    
    # 使用.xaxis.set_ticks_position设置x坐标刻度数字或名称的位置:bottom.(所有位置:top,bottom,both,default,none)
    ax.xaxis.set_ticks_position('bottom')
    
    # 使用.spines设置边框:x轴;使用.set_position设置边框位置:y=0的位置;(位置所有属性:outward,axes,data)
    ax.spines['bottom'].set_position(('data', 0))
    
    # 使用.yaxis.set_ticks_position设置y坐标刻度数字或名称的位置:left.(所有位置:left,right,both,default,none)
    ax.yaxis.set_ticks_position('left')
    
    # 使用.spines设置边框:y轴;使用.set_position设置边框位置:x=0的位置;(位置所有属性:outward,axes,data) 
    ax.spines['left'].set_position(('data',0))
    
    plt.show()

    结果示意图:

     

    4,Annotation标注

    标注图像中某些特殊的地方

    当图线中某些特殊地方需要标注时,我们可以使用 annotation. matplotlib 中的 annotation 有两种方法, 一种是用 plt 里面的 annotate,一种是直接用 plt 里面的 text 来写标注.

    ①画出基本图,绘制一条直线:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(-3, 3, 50)
    y = 2*x + 1
    
    plt.figure(num=1, figsize=(8, 5),)
    plt.plot(x, y,)
    

     结果如图:

    ②移动坐标

     然后我们挪动坐标轴的位置.

    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data', 0))
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data', 0))

    结果如图:

    然后标注出点(x0, y0)的位置信息. 用plt.plot([x0, x0,], [0, y0,], 'k--', linewidth=2.5) 画出一条垂直于x轴的虚线.

    x0 = 1
    y0 = 2*x0 + 1
    plt.plot([x0, x0,], [0, y0,], 'k--', linewidth=2.5)
    # set dot styles
    plt.scatter([x0, ], [y0, ], s=50, color='b')

    结果如图:

    ③添加注释annotate

     接下来我们就对(x0, y0)这个点进行标注.

    plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30),
                 textcoords='offset points', fontsize=16,
                 arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))

    其中参数xycoords='data' 是说基于数据的值来选位置, xytext=(+30, -30) 和 textcoords='offset points' 对于标注位置的描述 和 xy 偏差值, arrowprops是对图中箭头类型的一些设置.

    结果如图:

    Annotation 标注

     ④添加注释text

    plt.text(-3.7, 3, r'$This is the some text. mu sigma_i alpha_t$',
             fontdict={'size': 16, 'color': 'r'})

    其中-3.7, 3,是选取text的位置, 空格需要用到转字符 ,fontdict设置文本字体.

    结果如图:

    5,Matplotlib - 画布与图

    Matplotlib - 画布与图
    画布 figure
      fig = plt.figure()
    subplot
      ax1 = fig.add_subplot(2, 2, 1)
    调节子图间距 subplots_adjust(left, bottom, right, top, wspace, hspace)
    建立等差数列值 np.linspace(start,end)  # 在指定的间隔内返回均匀间隔的数字

     wspace表示宽度,hspace表示高度

    ㈠subplot多合一显示

    ①均匀图中图

    import matplotlib.pyplot as plt
    
    plt.figure()
    
    # 使用plt.subplot来创建小图. plt.subplot(2,2,1)表示将整个图像窗口分为2行2列, 当前位置为1. 
    # 使用plt.plot([0,1],[0,1])在第1个位置创建一个小图.
    plt.subplot(2,2,1)
    plt.plot([0,1],[0,1])
    
    # plt.subplot(2,2,2)表示将整个图像窗口分为2行2列, 当前位置为2. 使用plt.plot([0,1],[0,2])在第2个位置创建一个小图.
    plt.subplot(2,2,2)
    plt.plot([0,1],[0,2])
    
    # plt.subplot(2,2,3)表示将整个图像窗口分为2行2列,当前位置为3. plt.subplot(2,2,3)可以简写
    # 成plt.subplot(223), matplotlib同样可以识别. 使用plt.plot([0,1],[0,3])在第3个位置创建一个小图.
    plt.subplot(223)
    plt.plot([0,1],[0,3])
    
    # plt.subplot(224)表示将整个图像窗口分为2行2列, 当前位置为4. 使用plt.plot([0,1],[0,4])在第4个位置创建一个小图.
    plt.subplot(224)
    plt.plot([0,1],[0,4])
    
    plt.show()  # 展示

    结果如图所示:

    ②不均匀图中图

    import matplotlib.pyplot as plt
    
    plt.figure()
    
    # 使用plt.subplot(2,1,1)将整个图像窗口分为2行1列, 当前位置为1. 使用plt.plot([0,1],[0,1])在第1个位置创建一个小图.
    plt.subplot(2,1,1)
    plt.plot([0,1],[0,1])
    
    # 使用plt.subplot(2,3,4)将整个图像窗口分为2行3列, 当前位置为4. 使用plt.plot([0,1],[0,2])在第4个位置创建一个小图.
    plt.subplot(2,3,4)
    plt.plot([0,1],[0,2])
    
    plt.subplot(235)
    plt.plot([0,1],[0,3])
    
    plt.subplot(236)
    plt.plot([0,1],[0,4])
    
    plt.show()  # 展示

    结果如图所示:

    subplot分格显示

    图中图

    次坐标

    各种类型的图

    条形图:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    data = [32, 48, 21, 100]
    labels = ['Jan', 'Feb', 'Mar', 'Apr']
    
    plt.bar(np.arange(len(data)),data, align = 'edge')
    plt.xticks(np.arange(len(data)),labels)
    plt.show()

    图形示意:

    饼图:

    plt.pie([10,20,30,40],labels = ['a', 'b', 'c', 'd'], autopct = "%.2f%%",explode = [0.1, 0, 0.1, 0])
    plt.axis('equal')
    plt.show()

    图形结果:

     

    ㈥绘制K线图

    matplotlib.finanace子包中有许多绘制金融相关图的函数接口。最新的是mpl_finance包

    绘制K线图函数:

    matplotlib.finance.candlestick_ochl

    无需matplotlib.finance,直接使用mpl_finance中的candlestick_ochl

    import matplotlib.pyplot as plt
    import matplotlib
    import pandas as pd
    from mpl_finance import candlestick_ochl
    

      

    over

  • 相关阅读:
    C#使用DataSet Datatable更新数据库的三种实现方法
    WIN10 安装不了NET3.5
    Linux和Windows下ping命令详解(转:http://linux.chinaitlab.com/command/829332.html)
    ALLOCATE语句分配FORTRAN动态数组方法(转自http://blog.csdn.net/zhuxianjianqi/article/details/8067174)
    gfortran、g77等编译器中使用多个文件
    gfortran编译Fortran数组问题
    GRUB学习笔记(转自http://www.cnblogs.com/evilzy/archive/2008/03/30/1130173.html)
    ubuntu下gcc、g++和gfortran版本切换
    Beta冲刺Day1
    Beta冲刺预备
  • 原文地址:https://www.cnblogs.com/wuqiuming/p/10229421.html
Copyright © 2011-2022 走看看