zoukankan      html  css  js  c++  java
  • 图表绘制工具--Matplotlib 1

    '''
    【课程3.1】  Matplotlib简介及图表窗口
    
    Matplotlib → 一个python版的matlab绘图接口,以2D为主,支持python、numpy、pandas基本数据结构,运营高效且有较丰富的图表库
     
    '''
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    # 图表窗口1 → plt.show()
    
    plt.plot(np.random.rand(10))
    plt.show()
    # 直接生成图表

      输出

    # 图表窗口2 → 魔法函数,嵌入图表
    
    % matplotlib inline  
    x = np.random.randn(1000)
    y = np.random.randn(1000)
    plt.scatter(x,y)
    # 直接嵌入图表,不用plt.show()
    # <matplotlib.collections.PathCollection at ...> 代表该图表对象

      输出:

    # 图表窗口3 → 魔法函数,弹出可交互的matplotlib窗口
    
    % matplotlib notebook
    s = pd.Series(np.random.randn(100))
    s.plot(style = 'k--o',figsize=(10,5))
    # 可交互的matplotlib窗口,不用plt.show()
    # 可做一定调整

      输出:

    # 图表窗口4 → 魔法函数,弹出matplotlib控制台
    
    % matplotlib qt5
    df = pd.DataFrame(np.random.rand(50,2),columns=['A','B'])
    df.hist(figsize=(12,5),color='g',alpha=0.8)
    # 可交互性控制台
    # 如果已经设置了显示方式(比如notebook),需要重启然后再运行魔法函数
    # 网页嵌入的交互性窗口 和 控制台,只能显示一个
    
    #plt.close()    
    # 关闭窗口
    
    #plt.gcf().clear()  
    # 每次清空图表内内容  

      输出:

    array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000000000CA745C0>,
            <matplotlib.axes._subplots.AxesSubplot object at 0x000000000CA7D9B0>]], dtype=object)
    '''
    【课程3.2】  图表的基本元素
    
    图表内基本参数设置
     
    '''
    # 图名,图例,轴标签,轴边界,轴刻度,轴刻度标签等
    
    df = pd.DataFrame(np.random.rand(10,2),columns=['A','B'])
    fig = df.plot(figsize=(6,4))
    # figsize:创建图表窗口,设置窗口大小
    # 创建图表对象,并赋值与fig
    
    plt.title('Interesting Graph - Check it out')  # 图名
    plt.xlabel('Plot Number')  # x轴标签
    plt.ylabel('Important var') # y轴标签
    
    plt.legend(loc = 'upper right')  
    # 显示图例,loc表示位置
    # 'best'         : 0, (only implemented for axes legends)(自适应方式)
    # '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,
    
    plt.xlim([0,12])  # x轴边界
    plt.ylim([0,1.5])  # y轴边界
    plt.xticks(range(10))  # 设置x刻度
    plt.yticks([0,0.2,0.4,0.6,0.8,1.0,1.2])  # 设置y刻度
    fig.set_xticklabels("%.1f" %i for i in range(10))  # x轴刻度标签
    fig.set_yticklabels("%.2f" %i for i in [0,0.2,0.4,0.6,0.8,1.0,1.2])  # y轴刻度标签
    # 范围只限定图表的长度,刻度则是决定显示的标尺 → 这里x轴范围是0-12,但刻度只是0-9,刻度标签使得其显示1位小数
    # 轴标签则是显示刻度的标签
    
    print(fig,type(fig))
    # 查看表格本身的显示方式,以及类别

      输出:

    # 其他元素可视性
    
    x = np.linspace(-np.pi,np.pi,256,endpoint = True)
    c, s = np.cos(x), np.sin(x)
    plt.plot(x, c)
    plt.plot(x, s)
    # 通过ndarry创建图表
    
    plt.grid(True, linestyle = "--",color = "gray", linewidth = "0.5",axis = 'x')  
    # 显示网格
    # linestyle:线型
    # color:颜色
    # linewidth:宽度
    # axis:x,y,both,显示x/y/两者的格网
    
    plt.tick_params(bottom='on',top='off',left='on',right='off')  
    # 刻度显示
    
    import matplotlib
    matplotlib.rcParams['xtick.direction'] = 'out' 
    matplotlib.rcParams['ytick.direction'] = 'inout' 
    # 设置刻度的方向,in,out,inout
    # 这里需要导入matploltib,而不仅仅导入matplotlib.pyplot
    
    
    frame = plt.gca()
    #plt.axis('off')
    # 关闭坐标轴
    #frame.axes.get_xaxis().set_visible(False)
    #frame.axes.get_yaxis().set_visible(False)
    # x/y 轴不可见

      输出:

    '''
    【课程3.3】  图表的样式参数
    
    linestyle、style、color、marker
     
    '''
    # linestyle参数
    
    plt.plot([i**2 for i in range(100)],
            linestyle = '-.')
    # '-'       solid line style
    # '--'      dashed line style
    # '-.'      dash-dot line style
    # ':'       

      输出:

    # marker参数
    
    s = pd.Series(np.random.randn(100).cumsum())
    s.plot(linestyle = '--',
          marker = '.')
    # '.'       point marker
    # ','       pixel marker
    # 'o'       circle marker
    # 'v'       triangle_down marker
    # '^'       triangle_up marker
    # '<'       triangle_left marker
    # '>'       triangle_right marker
    # '1'       tri_down marker
    # '2'       tri_up marker
    # '3'       tri_left marker
    # '4'       tri_right marker
    # 's'       square marker
    # 'p'       pentagon marker
    # '*'       star marker
    # 'h'       hexagon1 marker
    # 'H'       hexagon2 marker
    # '+'       plus marker
    # 'x'       x marker
    # 'D'       diamond marker
    # 'd'       thin_diamond marker
    # '|'       vline marker
    # '_'       hline marker

      输出

    # color参数
    
    plt.hist(np.random.randn(100),
            color = 'g',alpha = 0.8)
    # alpha:0-1,透明度
    # 常用颜色简写:red-r, green-g, black-k, blue-b, yellow-y
    
    df = pd.DataFrame(np.random.randn(1000, 4),columns=list('ABCD'))
    df = df.cumsum()
    df.plot(style = '--.',alpha = 0.8,colormap = 'GnBu')
    # colormap:颜色板,包括:
    # Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r,
    # Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, 
    # PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, 
    # RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, 
    # YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, 
    # cool, cool_r, coolwarm, coolwarm_r, copper, copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r,
    # gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, 
    # gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, inferno, inferno_r, jet, jet_r, magma, magma_r, nipy_spectral, 
    # nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, seismic, seismic_r, spectral, 
    # spectral_r ,spring, spring_r, summer, summer_r, terrain, terrain_r, viridis, viridis_r, winter, winter_r
    
    # 其他参数见“颜色参数.docx”

      输出:

      

    # style参数,可以包含linestyle,marker,color
    
    ts = pd.Series(np.random.randn(1000).cumsum(), index=pd.date_range('1/1/2000', periods=1000))
    ts.plot(style = '--g.',grid = True)
    # style → 风格字符串,这里包括了linestyle(-),marker(.),color(g)
    # plot()内也有grid参数

      输出:

    # 整体风格样式
    
    import matplotlib.style as psl
    print(plt.style.available)
    # 查看样式列表
    psl.use('ggplot')
    ts = pd.Series(np.random.randn(1000).cumsum(), index=pd.date_range('1/1/2000', periods=1000))
    ts.plot(style = '--g.',grid = True,figsize=(10,6))
    # 一旦选用样式后,所有图表都会有样式,重启后才能关掉

      输出:

    ['seaborn-ticks', 'ggplot', 'seaborn-paper', 'seaborn-whitegrid', 'grayscale', 'seaborn-deep', 'seaborn-poster', 'seaborn-talk', 'seaborn-muted', 'seaborn-white', 'seaborn-colorblind', 'seaborn-darkgrid', 'seaborn-dark', 'fivethirtyeight', 'bmh', 'dark_background', 'seaborn-bright', 'seaborn-pastel', 'classic', 'seaborn-notebook', 'seaborn-dark-palette']

    '''
    【课程3.4】  刻度、注解、图表输出
    
    主刻度、次刻度
     
    '''
    # 刻度
    
    from matplotlib.ticker import MultipleLocator, FormatStrFormatter
    
    t = np.arange(0.0, 100.0, 1)
    s = np.sin(0.1*np.pi*t)*np.exp(-t*0.01)
    ax = plt.subplot(111) #注意:一般都在ax中设置,不再plot中设置
    plt.plot(t,s,'--*')
    plt.grid(True, linestyle = "--",color = "gray", linewidth = "0.5",axis = 'both')  
    # 网格
    #plt.legend()  # 图例
    
    xmajorLocator = MultipleLocator(10) # 将x主刻度标签设置为10的倍数
    xmajorFormatter = FormatStrFormatter('%.0f') # 设置x轴标签文本的格式
    xminorLocator   = MultipleLocator(5) # 将x轴次刻度标签设置为5的倍数  
    ymajorLocator = MultipleLocator(0.5) # 将y轴主刻度标签设置为0.5的倍数
    ymajorFormatter = FormatStrFormatter('%.1f') # 设置y轴标签文本的格式
    yminorLocator   = MultipleLocator(0.1) # 将此y轴次刻度标签设置为0.1的倍数  
    
    ax.xaxis.set_major_locator(xmajorLocator)  # 设置x轴主刻度
    ax.xaxis.set_major_formatter(xmajorFormatter)  # 设置x轴标签文本格式
    ax.xaxis.set_minor_locator(xminorLocator)  # 设置x轴次刻度
    
    ax.yaxis.set_major_locator(ymajorLocator)  # 设置y轴主刻度
    ax.yaxis.set_major_formatter(ymajorFormatter)  # 设置y轴标签文本格式
    ax.yaxis.set_minor_locator(yminorLocator)  # 设置y轴次刻度
    
    ax.xaxis.grid(True, which='both') #x坐标轴的网格使用主刻度
    ax.yaxis.grid(True, which='minor') #y坐标轴的网格使用次刻度
    # which:格网显示
    
    #删除坐标轴的刻度显示
    #ax.yaxis.set_major_locator(plt.NullLocator()) 
    #ax.xaxis.set_major_formatter(plt.NullFormatter()) 

      输出:

    # 注解
    
    df = pd.DataFrame(np.random.randn(10,2))
    df.plot(style = '--o')
    plt.text(5,0.5,'hahaha',fontsize=10)  
    # 注解 → 横坐标,纵坐标,注解字符串

      输出:

    # 图表输出
    
    df = pd.DataFrame(np.random.randn(1000, 4), columns=list('ABCD'))
    df = df.cumsum()
    df.plot(style = '--.',alpha = 0.5)
    plt.legend(loc = 'upper left')
    plt.savefig('C:/Users/Hjx/Desktop/pic.png',
                dpi=400,
                bbox_inches = 'tight',
                facecolor = 'g',
                edgecolor = 'b')
    # 可支持png,pdf,svg,ps,eps…等,以后缀名来指定
    # dpi是分辨率
    # bbox_inches:图表需要保存的部分。如果设置为‘tight’,则尝试剪除图表周围的空白部分。
    # facecolor,edgecolor: 图像的背景色,默认为‘w’(白色)

      输出:

    '''
    【课程3.5】  子图
    
    在matplotlib中,整个图像为一个Figure对象
    在Figure对象中可以包含一个或者多个Axes对象
    每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域
    
    plt.figure, plt.subplot
     
    '''
    # plt.figure() 绘图对象
    # plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, 
    # frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, **kwargs)
    
    fig1 = plt.figure(num=1,figsize=(4,2))
    plt.plot(np.random.rand(50).cumsum(),'k--')
    fig2 = plt.figure(num=2,figsize=(4,2))
    plt.plot(50-np.random.rand(50).cumsum(),'k--')
    # num:图表序号,可以试试不写或都为同一个数字的情况,图表如何显示
    # figsize:图表大小
    
    # 当我们调用plot时,如果设置plt.figure(),则会自动调用figure()生成一个figure, 严格的讲,是生成subplots(111)

      输出:

    # 子图创建1 - 先建立子图然后填充图表
    
    fig = plt.figure(figsize=(10,6),facecolor = 'gray')
    
    ax1 = fig.add_subplot(2,2,1)  # 第一行的左图
    plt.plot(np.random.rand(50).cumsum(),'k--')
    plt.plot(np.random.randn(50).cumsum(),'b--')
    # 先创建图表figure,然后生成子图,(2,2,1)代表创建2*2的矩阵表格,然后选择第一个,顺序是从左到右从上到下
    # 创建子图后绘制图表,会绘制到最后一个子图
    
    ax2 = fig.add_subplot(2,2,2)  # 第一行的右图
    ax2.hist(np.random.rand(50),alpha=0.5)
    
    ax4 = fig.add_subplot(2,2,4)  # 第二行的右图
    df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
    ax4.plot(df2,alpha=0.5,linestyle='--',marker='.')
    # 也可以直接在子图后用图表创建函数直接生成图表

      输出:

    # 子图创建1 - 先建立子图然后填充图表
    
    fig = plt.figure(figsize=(10,6),facecolor = 'gray')
    
    ax1 = fig.add_subplot(2,2,1)  # 第一行的左图
    plt.plot(np.random.rand(50).cumsum(),'k--')
    plt.plot(np.random.randn(50).cumsum(),'b--')
    # 先创建图表figure,然后生成子图,(2,2,1)代表创建2*2的矩阵表格,然后选择第一个,顺序是从左到右从上到下
    # 创建子图后绘制图表,会绘制到最后一个子图
    
    ax2 = fig.add_subplot(2,2,2)  # 第一行的右图
    ax2.hist(np.random.rand(50),alpha=0.5)
    
    ax4 = fig.add_subplot(2,2,4)  # 第二行的右图
    df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
    ax4.plot(df2,alpha=0.5,linestyle='--',marker='.')
    # 也可以直接在子图后用图表创建函数直接生成图表

      输出:

    # 子图创建2 - 创建一个新的figure,并返回一个subplot对象的numpy数组 → plt.subplot
    
    fig,axes = plt.subplots(2,3,figsize=(10,4))
    ts = pd.Series(np.random.randn(1000).cumsum())
    print(axes, axes.shape, type(axes))
    # 生成图表对象的数组
    
    ax1 = axes[0,1]
    ax1.plot(ts)

      输出:

    [[<matplotlib.axes._subplots.AxesSubplot object at 0x000000000BB5A4A8>
      <matplotlib.axes._subplots.AxesSubplot object at 0x000000000C08B240>
      <matplotlib.axes._subplots.AxesSubplot object at 0x000000000C0D6550>]
     [<matplotlib.axes._subplots.AxesSubplot object at 0x000000000C10CDD8>
      <matplotlib.axes._subplots.AxesSubplot object at 0x000000000C15B160>
      <matplotlib.axes._subplots.AxesSubplot object at 0x000000000C190DA0>]] (2, 3) <class 'numpy.ndarray'>

    # plt.subplots,参数调整
    
    fig,axes = plt.subplots(2,2,sharex=True,sharey=True)
    # sharex,sharey:是否共享x,y刻度
    
    for i in range(2):
        for j in range(2):
            axes[i,j].hist(np.random.randn(500),color='k',alpha=0.5)
    plt.subplots_adjust(wspace=0,hspace=0)
    # wspace,hspace:用于控制宽度和高度的百分比,比如subplot之间的间距

      输出:

    # 子图创建3 - 多系列图,分别绘制
    
    df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
    df = df.cumsum()
    df.plot(style = '--.',alpha = 0.4,grid = True,figsize = (8,8),
           subplots = True,
           layout = (2,3),
           sharex = False)
    plt.subplots_adjust(wspace=0,hspace=0.2)
    # plt.plot()基本图表绘制函数 → subplots,是否分别绘制系列(子图)
    # layout:绘制子图矩阵,按顺序填充

      输出:

  • 相关阅读:
    广域网(ppp协议、HDLC协议)
    0120. Triangle (M)
    0589. N-ary Tree Preorder Traversal (E)
    0377. Combination Sum IV (M)
    1074. Number of Submatrices That Sum to Target (H)
    1209. Remove All Adjacent Duplicates in String II (M)
    0509. Fibonacci Number (E)
    0086. Partition List (M)
    0667. Beautiful Arrangement II (M)
    1302. Deepest Leaves Sum (M)
  • 原文地址:https://www.cnblogs.com/654321cc/p/9426090.html
Copyright © 2011-2022 走看看