matplotlib實戰

 

plt.imshow(face_image.mean(axis=2),cmap='gray') 

圖片灰度處理

 

size = (m,n,3) 圖片的通常形式就是這樣的html

rgb 0-255 jpg圖片 166,255,89 0.0-1.0 png圖片 0.1,0.2,0.6python

灰度處理之後 rgb---->gray 166,255,89 ---> 190 0.1,0.2,0.6 -- > 0.4app

size = (m,n)dom

import scipy.misc as miscide

import numpy as np
import pandas as pd
from pandas import Series,DataFramesvg

import matplotlib.pyplot as plt
%matplotlib inline函數

face_image = misc.face()
plt.imshow(face_image)字體

face_gray = misc.face(gray=True)
plt.imshow(face_gray,cmap='gray')ui

三種方法spa

  • 最大值法
  • 平均值法
  • RGB權重法[0.299,0.587,0.114]

plt.imshow(face_image.max(axis=2),cmap='gray')

plt.imshow(face_image.mean(axis=2),cmap='gray')

n = np.array([0.299,0.587,0.114])
plt.imshow(np.dot(face_image,n),cmap='gray')

matplotlib

1、Matplotlib基礎知識

 

Matplotlib中的基本圖表包括的元素

  • x軸和y軸 axis 水平和垂直的軸線
  • x軸和y軸刻度 tick 刻度標示座標軸的分隔,包括最小刻度和最大刻度
  • x軸和y軸刻度標籤 tick label 表示特定座標軸的值
  • 繪圖區域 axes 實際繪圖的區域

只含單一曲線的圖

x = np.arange(-np.pi,np.pi,0.1)
y = np.sin(x)
plt.plot(x,y)

 

包含多個曲線的圖

plt.plot(x,np.sin(x),x,np.cos(x))

 

設置子畫布

axes = plt.subplot()

plt.figure(figsize=(8,8))
# 設置字畫布,返回的值就是當前字畫布的座標系對象
axes1 = plt.subplot(2,2,1)
axes2 = plt.subplot(222)
axes3 = plt.subplot(223)
axes4 = plt.subplot(224)

網格線

繪製正弦餘弦

 

設置grid參數(參數與plot函數相同),使用plt面向對象的方法,建立多個子圖顯示不一樣網格線

  • lw表明linewidth,線的粗細
  • alpha表示線的明暗程度
  • color表明顏色
  • axis顯示軸向
  • # 對不一樣的座標系分別設置網格線
    plt.figure(figsize=(16,4))
    axes1 = plt.subplot(141)
    axes2 = plt.subplot(142)
    axes3 = plt.subplot(143)
    axes4 = plt.subplot(144)

    axes1.grid(True)
    axes3.grid(True)

    # axis參數設置網格線顯示橫縱
    axes2.grid(axis='x')
    axes4.grid(axis='y')

    # 設置線寬、透明度、顏色
    # red green yellow blue black orange pink gray white purple cyan
    axes1.grid(color='red')
    axes2.grid(lw = 2)
    axes3.grid(alpha = 0.5)

  • 座標軸界限

     

    plt.axis([xmin,xmax,ymin,ymax])

  • plt.figure(figsize=(4,4))


    x = np.linspace(-1,1,100)
    y = (1-x**2)**0.5
    plt.plot(x,y)
    plt.axis([-4,4,-3,3])

  • 座標軸標籤

    xlabel方法和ylabel方法
    plt.ylabel('y = x^2 + 5',rotation = 60)旋轉

    • color 標籤顏色
    • fontsize 字體大小
    • rotation 旋轉角度
  • loc參數能夠是2元素的元組,表示圖例左下角的座標

    • [0,0] 左下
    • [0,1] 左上
    • [1,0] 右下
    • [1,1] 右上
    In [122]:
     
     
     
     
     
    plt.plot(x,x,x,x*2,x,x*0.5)
    # 使用loc參數設置圖例位置
    plt.legend(['nomral','fast','slow'],loc=[-0.3,0.3])
     
     
    Out[122]:
    <matplotlib.legend.Legend at 0x1bee4870>
     
     

    圖例也能夠超過圖的界限loc = (-0.1,0.9)

     

    ncol參數

    ncol控制圖例中有幾列,在legend中設置ncol,須要設置loc

    In [124]:
     
     
     
     
     
    plt.plot(x,x,x,x*2,x,x*0.5)
    # 使用nloc參數設置圖例的列數
    plt.legend(['nomral','fast','slow'],loc=9,ncol=3)
     
     
    Out[124]:
    <matplotlib.legend.Legend at 0x1bf93870>
     
     

    linestyle、color、marker

    修改線條樣式

    In [139]:
     
     
     
     
     
    x = np.random.randint(-20,30,size=(100,3))
    df = DataFrame(x)
    df
     
    . . .
    In [142]:
     
     
     
     
     
    plt.plot(df.index,df[0].cumsum(),linestyle='--',color='red',marker='o')
    plt.plot(df.index,df[1].cumsum(),linestyle='-.',color='blue',marker='H')
    plt.plot(df.index,df[2].cumsum(),ls=':',color='green',marker='d')
    plt.legend(['one','two','three'])
     
     
    Out[142]:
    <matplotlib.legend.Legend at 0x1d43e550>
     
     

    保存圖片

     

    使用figure對象的savefig的函數

    • filename
      含有文件路徑的字符串或Python的文件型對象。圖像格式由文件擴展名推斷得出,例如,.pdf推斷出PDF,.png推斷出PNG (「png」、「pdf」、「svg」、「ps」、「eps」……)
    • dpi
      圖像分辨率(每英寸點數),默認爲100
    • facecolor
      圖像的背景色,默認爲「w」(白色)
    In [148]:
     
     
     
     
     
    # 獲取fig對象
    fig = plt.figure()
    x = np.arange(-np.pi,np.pi,0.1)
    plt.plot(x,np.sin(x))
    fig.savefig('dancer.png',dpi=100,facecolor='blue')
    fig.savefig('dancer.jpg',dpi=100,facecolor='green')
     
     
     
    In [147]:
     
     
     
     
     
    png = plt.imread('dancer.png')
    jpg = plt.imread('dancer.jpg')
    display(png,jpg)
     
    . . .
     

    2、設置plot的風格和樣式

    plot語句中支持除X,Y之外的參數,以字符串形式存在,來控制顏色、線型、點型等要素,語法形式爲:
    plt.plot(X, Y, 'format', ...)

     

    點和線的樣式

     

    顏色

    參數color或c

    In [153]:
     
     
     
     
     
    x = np.arange(0,100)
    plt.plot(x,x**2,c = 'm')
     
     
    Out[153]:
    [<matplotlib.lines.Line2D at 0x1d76b770>]
     
     
    顏色值的方式
    • 別名
      • color='r'
    • 合法的HTML顏色名
      • color = 'red'
    顏色 別名 HTML顏色名 顏色 別名 HTML顏色名
    藍色 b blue 綠色 g green
    紅色 r red 黃色 y yellow
    青色 c cyan 黑色 k black
    洋紅色 m magenta 白色 w white
    • HTML十六進制字符串
      • color = '#eeefff'
    • 歸一化到[0, 1]的RGB元組
      • color = (0.3, 0.3, 0.4)
    • jpg png 區別
    In [156]:
     
     
     
     
     
    plt.plot(x,x,color='#0000ff')
    plt.plot(x,2*x,color = '#00ff00')
    plt.plot(x,x/2,color = '#ff0000')
     
     
    Out[156]:
    [<matplotlib.lines.Line2D at 0x1a81b3f0>]
     
    In [157]:
     
     
     
     
     
    plt.plot(x,x,color=(0.3,0.3,0.4))
     
     
    Out[157]:
    [<matplotlib.lines.Line2D at 0x1a859830>]
     
     
    透明度

    alpha參數

    In [158]:
     
     
     
     
     
    plt.plot(x,x,color=(0.3,0.3,0.4),alpha=0.1)
     
     
    Out[158]:
    [<matplotlib.lines.Line2D at 0x1a88aa90>]
     
     
    背景色

    設置背景色,經過plt.subplot()方法傳入facecolor參數,來設置座標系的背景色

    In [163]:
     
     
     
     
     
    # 使用座標系對象繪製圖形
    # fig = plt.figure() # 經過此方法能獲得畫布對象
    axes = plt.subplot(facecolor='c')
    axes.plot(x,x,color = 'g')
     
     
    Out[163]:
    [<matplotlib.lines.Line2D at 0x1d8b3e90>]
     
    In [164]:
     
     
     
     
     
    plt.subplot(facecolor = 'yellow')
    plt.plot(x,np.sin(x),color='red')
     
     
    Out[164]:
    [<matplotlib.lines.Line2D at 0x1efd02b0>]
     
     

    線型

    參數linestyle或ls

     
    線條風格 描述 線條風格 描述
    '-' 實線 ':' 虛線
    '--' 破折線 'steps' 階梯線
    '-.' 點劃線 'None' / ',' 什麼都不畫
    In [169]:
     
     
     
     
     
    x = np.arange(0,100,5)
    plt.plot(x,x,linestyle = '-',linewidth=1)
    plt.plot(x,x*2,linestyle = '--',linewidth=2)
    plt.plot(x,x*3,ls = '-.',lw=3)
    plt.plot(x,x*4,ls = ':',lw=4)
    plt.plot(x,x*5,ls = 'steps',lw=5)
     
     
    Out[169]:
    [<matplotlib.lines.Line2D at 0x1d44e730>]
     
     
    線寬

    linewidth或lw參數

     
    不一樣寬度的破折線

    dashes參數 eg.dashes = [20,50,5,2,10,5]

    設置破折號序列各段的寬度

    In [174]:
     
     
     
     
     
    x = np.arange(-np.pi,np.pi,0.1)
    plt.plot(x,np.sin(x),dashes=[5,1,10,2,20,4])
     
    . . .
     

    點型

    • marker 設置點形
    • markersize 設置點形大小
     
    標記 描述 標記 描述
    '1' 一角朝下的三腳架 '3' 一角朝左的三腳架
    '2' 一角朝上的三腳架 '4' 一角朝右的三腳架
    In [182]:
     
     
     
     
     
    x = np.arange(0,10,1)
    plt.plot(x,x,marker = '3',markersize=15)
    plt.plot(x,2*x,marker = '4',markersize=15)
     
     
    Out[182]:
    [<matplotlib.lines.Line2D at 0x1f342c30>]
     
     
    標記 描述 標記 描述
    's' 正方形 'p' 五邊形
    'h' 六邊形1 'H' 六邊形2
    '8' 八邊形
    In [191]:
     
     
     
     
     
    plt.plot(x,x,marker = 's',markersize = 30)
    plt.plot(x,2*x,marker = 'p',markersize = 40)
    plt.plot(x,3*x,marker = 'h',markersize = 30)
    plt.plot(x,4*x,marker = '8',markersize = 30)
     
     
    Out[191]:
    [<matplotlib.lines.Line2D at 0x20555f70>]
     
     
    標記 描述 標記 描述
    '.' 'x' X
    '*' 星號 '+' 加號
    ',' 像素
    In [196]:
     
     
     
     
     
    plt.plot(x,x,marker = '.',markersize = 30)
    plt.plot(x,2*x,marker = 'x',markersize = 30)
    plt.plot(x,3*x,marker = '*',markersize = 30)
    plt.plot(x,4*x,marker = ',',markersize = 30)
     
     
    Out[196]:
    [<matplotlib.lines.Line2D at 0x2068d430>]
     
     
    標記 描述 標記 描述
    'o' 圓圈 'D' 菱形
    'd' 小菱形 '','None',' ',None
    In [199]:
     
     
     
     
     
    plt.plot(x,x,marker = 'o',markersize = 30)
    plt.plot(x,2*x,marker = 'D',markersize = 30)
    plt.plot(x,3*x,marker = 'd',markersize = 30)
     
     
    Out[199]:
    [<matplotlib.lines.Line2D at 0x20748290>]
     
     
    標記 描述 標記 描述
    '_' 水平線 '|' 豎線

    In [201]:
     
     
     
     
     
    plt.plot(x,x,marker = '|',markersize = 30)
    plt.plot(x,2*x,marker = '_',markersize = 30)
     
     
    Out[201]:
    [<matplotlib.lines.Line2D at 0x207affb0>]
     
     
    標記 描述 標記 描述
    'v' 一角朝下的三角形 '<' 一角朝左的三角形
    '^' 一角朝上的三角形 '>' 一角朝右的三角形
    In [203]:
     
     
     
     
     
    plt.plot(x,x,marker = 'v',markersize = 30)
    plt.plot(x,2*x,marker = '<',markersize = 30)
    plt.plot(x,3*x,marker = '>',markersize = 30)
    plt.plot(x,4*x,marker = '^',markersize = 30)
     
     
    Out[203]:
    [<matplotlib.lines.Line2D at 0x20830d10>]
     
     

    多參數連用

    顏色、點型、線型,能夠把幾種參數寫在一個字符串內進行設置 'r-.o'

    In [204]:
     
     
     
     
     
    plt.plot(x,x,'r-.o')
     
     
    Out[204]:
    [<matplotlib.lines.Line2D at 0x20867e70>]
     
     

    更多點和線的設置

    • markeredgecolor = 'green',
    • markeredgewidth = 2,
    • markerfacecolor = 'purple'
     
    參數 描述 參數 描述
    color或c 線的顏色 linestyle或ls 線型
    linewidth或lw 線寬 marker 點型
    markeredgecolor 點邊緣的顏色 markeredgewidth 點邊緣的寬度
    markerfacecolor 點內部的顏色 markersize 點的大小

    In [216]:
     
     
     
     
     
    plt.plot(x,x,marker = 'H',markersize = 30,markeredgecolor = 'm',markeredgewidth=2,markerfacecolor='b',lw=10,c='blue')
     
     
    Out[216]:
    [<matplotlib.lines.Line2D at 0x21b05430>]
     
     

    在一條語句中爲多個曲線進行設置

     
    多個曲線同一設置

    屬性名聲明,不能夠多參數連用

    plt.plot(x1, y1, x2, y2, fmt, ...)

    In [217]:
     
     
     
     
     
    plt.plot(x,x,x,2*x,color = 'c',ls='--',marker='d')
     
     
    Out[217]:
    [<matplotlib.lines.Line2D at 0x21b40090>,
     <matplotlib.lines.Line2D at 0x21b40190>]
     
     
    多個曲線不一樣設置

    多個都進行設置時,多參數連用 plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...)

    In [219]:
     
     
     
     
     
    plt.plot(x,x,'r-.h',x,2*x,'b-->')
     
     
    Out[219]:
    [<matplotlib.lines.Line2D at 0x209bd190>,
     <matplotlib.lines.Line2D at 0x209bdbd0>]
     
     

    三種設置方式

     
    向方法傳入關鍵字參數
    • import matplotlib as mpl
     
    對實例使用一系列的setter方法
    • plt.plot()方法返回一個包含全部線的列表,設置每個線須要獲取該線對象
      • eg: lines = plt.plot(); line = lines[0]
      • line.set_linewith()
      • line.set_linestyle()
      • line.set_color()
    對座標系使用一系列的setter方法
    • axes = plt.subplot()獲取座標系
      • set_title()
      • set_facecolor()
      • set_xticks、set_yticks 設置刻度值
      • set_xticklabels、set_yticklabels 設置刻度名稱
    In [223]:
     
     
     
     
     
    # plt.plot函數,返回值的唄繪製的包含每一條線對象的列表
    lines = plt.plot(x,x,x,x*2,x,x*3)
    # 能夠經過line對象進行設置外觀
    lines[0].set_linewidth(10)
    lines[1].set_linestyle('--')
    lines[2].set_color('red')
     
     
     
    In [237]:
     
     
     
     
     
    axes = plt.subplot(111)
    axes.set_title('axes_title')
    axes.set_xlabel('X-Label')
    axes.set_ylabel('Y-Label')
    axes.set_facecolor('yellow')
    axes.set_xticklabels(['-pi',0,'pi'])
    axes.set_yticklabels(['min',0,'max'])
    axes.set_xticks([-np.pi,0,np.pi])
    axes.set_yticks([-1,0,1])
    x = np.arange(-np.pi,np.pi,0.1)
    axes.plot(x,np.sin(x))
     
     
    Out[237]:
    [<matplotlib.lines.Line2D at 0x220aa8b0>]
     
     
    使用plt.setp()方法
    • plt.setp(line2,linestyle='--',linewidth = 3,marker = 'o')
    • plt.setp(axes,title='title')
    In [241]:
     
     
     
     
     
    lines = plt.plot(x,x,x,x*2,x,np.sin(x))
    plt.setp(lines[0],color='red',ls='--',lw=4)
    axes = plt.subplot()
    # p->> property屬性
    plt.setp(axes,title='title')
     
    . . .
     

    X、Y軸座標刻度

    plt.xticks()和plt.yticks()方法

    • 需指定刻度值和刻度名稱 plt.xticks([刻度列表],[名稱列表])
    • 支持fontsize、rotation、color等參數設置
    In [245]:
     
     
     
     
     
    x = np.arange(0,10,1)
    plt.plot(x,x*2)
    # 使用plt來設置座標軸刻度
    # 新的刻度標籤最好與原始的刻度標籤保持一致
    # eg1:使用原始刻度
    plt.xticks([0,2,4,6,8],list('abcde'))
    # 在matplotlib裏顯示漢字的方法
    # eg2:修改原始刻度
    plt.yticks([0,4,8,12,16],['ok','good','very good','good good','vv good'])
     
     
    Out[245]:
    ([<matplotlib.axis.YTick at 0x21c57090>,
      <matplotlib.axis.YTick at 0x221fb8d0>,
      <matplotlib.axis.YTick at 0x21c6c690>,
      <matplotlib.axis.YTick at 0x21c74390>,
      <matplotlib.axis.YTick at 0x21c74790>],
     <a list of 5 Text yticklabel objects>)
     
     

    正弦餘弦

    LaTex語法,用ππ、σσ等表達式在圖表上寫上希臘字母

    In [250]:
     
     
     
     
     
    x = np.arange(-np.pi,np.pi,0.1)
    plt.plot(x,np.sin(x),x,np.cos(x))
    # 第一個列表寫新的刻度值,注意不要越界(可能會顯示不出來)
    plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],['-$\pi$','-$\pi$/2',0,'$\pi$/2','$\pi$'])
    plt.yticks([-1,0,1],['min',0,'max'])
     
     
    Out[250]:
    ([<matplotlib.axis.YTick at 0x21da52d0>,
      <matplotlib.axis.YTick at 0x231e75b0>,
      <matplotlib.axis.YTick at 0x21da5390>],
     <a list of 3 Text yticklabel objects>)
     
     

    3、2D圖形

     

    直方圖

    【直方圖的參數只有一個x!!!不像條形圖須要傳入x,y】

    hist()的參數

    • bins
      能夠是一個bin數量的整數值,也能夠是表示bin的一個序列。默認值爲10
    • normed
      若是值爲True,直方圖的值將進行歸一化處理,造成機率密度,默認值爲False
    • color
      指定直方圖的顏色。能夠是單一顏色值或顏色的序列。若是指定了多個數據集合,顏色序列將會設置爲相同的順序。若是未指定,將會使用一個默認的線條顏色
    • orientation
      經過設置orientation爲horizontal建立水平直方圖。默認值爲vertical
    In [266]:
     
     
     
     
     
    x = np.random.randint(1,100,50)
    x
     
     
    Out[266]:
    array([71, 51, 44, 82, 16, 32, 94, 27, 39, 35, 23, 57, 35, 55, 17, 54, 19,
           25,  2, 38, 46, 26, 57, 46, 69, 14, 79, 27, 77, 83, 98, 67, 97, 90,
           21, 83, 22, 66, 10, 37, 94, 94, 17, 38,  7, 68, 72, 76, 54, 23])
    In [268]:
     
     
     
     
     
    plt.hist(x,bins=10,normed=True,color = 'r',orientation='horizontal')
     
     
    Out[268]:
    (array([ 0.00625   ,  0.0125    ,  0.01458333,  0.01458333,  0.00625   ,
             0.0125    ,  0.00833333,  0.00833333,  0.00833333,  0.0125    ]),
     array([  2. ,  11.6,  21.2,  30.8,  40.4,  50. ,  59.6,  69.2,  78.8,
             88.4,  98. ]),
     <a list of 10 Patch objects>)
     
     

    條形圖

    【條形圖有兩個參數x,y】

    • width 縱向設置條形寬度
    • height 橫向設置條形高度

    bar()、barh()

    In [262]:
     
     
     
     
     
    x = Series(np.array([3,5,7,8,9,2,4]))
    plt.bar(x.index,height = x.values)
     
     
    Out[262]:
    <Container object of 7 artists>
     
    In [263]:
     
     
     
     
     
    plt.barh(x.index,width=x.values)
     
     
    Out[263]:
    <Container object of 7 artists>
     
     

    餅圖

    【餅圖也只有一個參數x!】

    pie()
    餅圖適合展現各部分佔整體的比例,條形圖適合比較各部分的大小

     

    普通各部分佔滿餅圖

    In [269]:
     
     
     
     
     
    x = [89,45,32,16]
    plt.pie(x)
     
    . . .
     

    普通未佔滿餅圖

    In [270]:
     
     
     
     
     
    x = [0.1,0.3,0.5]
    plt.pie(x)
     
    . . .
     

    餅圖陰影、分裂等屬性設置

    • labels參數設置每一塊的標籤;
    • labeldistance參數設置標籤距離圓心的距離(比例值,只能設置一個浮點小數)
    • autopct參數設置比例值的顯示格式(%1.1f%%);
    • pctdistance參數設置比例值文字距離圓心的距離
    • explode參數設置每一塊頂點距圓形的長度(比例值,列表);
    • colors參數設置每一塊的顏色(列表);
    • shadow參數爲布爾值,設置是否繪製陰影
    • startangle參數設置餅圖起始角度
    In [283]:
     
     
     
     
     
    x = [89,45,32,16]
    plt.pie(x,labels=['boy','girl','bgirl','gboy'],labeldistance=0.3,autopct='%1.1f%%',pctdistance=0.8,
           explode=[0,0,0,0.2],colors=['m','c','purple','yellow'],shadow=True,startangle=90)
     
     
    Out[283]:
    ([<matplotlib.patches.Wedge at 0x24aa4ab0>,
      <matplotlib.patches.Wedge at 0x24aad0d0>,
      <matplotlib.patches.Wedge at 0x24aad6d0>,
      <matplotlib.patches.Wedge at 0x24aadd10>],
     [Text(-0.299821,0.0103548,'boy'),
      Text(0.195031,-0.227954,'girl'),
      Text(0.268004,0.134811,'bgirl'),
      Text(0.136343,0.481052,'gboy')],
     [Text(-0.799523,0.0276129,'48.9%'),
      Text(0.520083,-0.607876,'24.7%'),
      Text(0.714676,0.359496,'17.6%'),
      Text(0.272686,0.962103,'8.8%')])
     
     

    散點圖

    【散點圖須要兩個參數x,y,但此時x不是表示x軸的刻度,而是每一個點的橫座標!】

    scatter()

    In [289]:
     
     
     
     
     
    x = np.random.normal(size = 1000)
    y = np.random.normal(size = 1000)
    # [0.3,0.6,0.8] 這樣的一個數就能夠表示一個顏色
    # 隨機生成1000個顏色
    color = np.random.random(size = (1000,3))
    # s表示marker的大小
    plt.scatter(x,y,marker='d',color=color,s = 30)
     
     
    Out[289]:
    <matplotlib.collections.PathCollection at 0x21bbcc90>
     
     

    4、圖形內的文字、註釋、箭頭(自學)

     

    控制文字屬性的方法:

    pyplot函數 API方法 描述
    text() mpl.axes.Axes.text() 在Axes對象的任意位置添加文字
    xlabel() mpl.axes.Axes.set_xlabel() 爲X軸添加標籤
    ylabel() mpl.axes.Axes.set_ylabel() 爲Y軸添加標籤
    title() mpl.axes.Axes.set_title() 爲Axes對象添加標題
    legend() mpl.axes.Axes.legend() 爲Axes對象添加圖例
    figtext() mpl.figure.Figure.text() 在Figure對象的任意位置添加文字
    suptitle() mpl.figure.Figure.suptitle() 爲Figure對象添加中心化的標題
    annnotate() mpl.axes.Axes.annotate() 爲Axes對象添加註釋(箭頭可選)

    全部的方法會返回一個matplotlib.text.Text對象

    In [314]:
     
     
     
     
     
    x = np.arange(-np.pi,np.pi,0.1)
    plt.plot(x,np.sin(x))
    # 畫布 fig = plt.figure()
    # 座標系 axes = plt.subplot()
    axes = plt.subplot()
    axes.text(0.5,0.4,'test')
    axes.set_xlabel('X-Label')
    axes.set_ylabel('Ylabel')
    axes.set_title('title')
     
    . . .
    In [313]:
     
     
     
     
     
    fig = plt.figure(figsize=(8,4))
    axes1 = plt.subplot(1,2,1)
    axes2 = plt.subplot(1,2,2)
    axes1.plot(x,np.sin(x))
    axes2.plot(x,np.cos(x))
    fig.text(0.4,0.5,'test')
    fig.suptitle('suptitle')
    axes1.set_title('title1')
    axes2.set_title('title2')
     
     
    Out[313]:
    Text(0.5,1,'title2')
     
     

    圖形內的文字

    text()

     

    註釋

    annotate()

    • xy參數設置箭頭指示的位置
    • xytext參數設置註釋文字的位置
    • arrowprops參數以字典的形式設置箭頭的樣式
    • width參數設置箭頭長方形部分的寬度
    • headlength參數設置箭頭尖端的長度,
    • headwidth參數設置箭頭尖端底部的寬度
    • shrink參數設置箭頭頂點、尾部與指示點、註釋文字的距離(比例值),能夠理解爲控制箭頭的長度
     
    以下都是arrowstyle能夠選擇的風格樣式
    
    ``'->'``       head_length=0.4,head_width=0.2
    ``'-['``       widthB=1.0,lengthB=0.2,angleB=None
    ``'|-|'``      widthA=1.0,widthB=1.0
    ``'-|>'``      head_length=0.4,head_width=0.2
    ``'<-'``       head_length=0.4,head_width=0.2
    ``'<->'``      head_length=0.4,head_width=0.2
    ``'<|-'``      head_length=0.4,head_width=0.2
    ``'<|-|>'``    head_length=0.4,head_width=0.2
    ``'fancy'``    head_length=0.4,head_width=0.4,tail_width=0.4
    ``'simple'``   head_length=0.5,head_width=0.5,tail_width=0.2
    ``'wedge'``    tail_width=0.3,shrink_factor=0.5
    In [337]:
     
     
     
     
     
    x = np.arange(-np.pi,np.pi,0.1)
    axes = plt.subplot()
    plt.plot(x,np.sin(x))
    # 模式1:使用arrowstyle鍵,能夠選擇如上幾種預約義的箭頭樣式
    axes.annotate(s='annotation2',xy=[-1.7,-1],xytext=[0.5,-0.5],arrowprops = {'arrowstyle':'fancy'})
    # 模式2:不適用arrowstyle鍵,能夠使用{'headlength':10,'headwidth':16,'shrink':0.1來自定義樣式
    axes.annotate(s='annotation1',xy=[1.7,1],xytext=[-0.5,0.5],arrowprops = {'headlength':10,'headwidth':16,'shrink':0.1})
     
    . . .
     

    練習
    三個隨機正太分佈數據

    In [359]:
     
     
     
     
     
    index = np.arange(100)
    x = np.random.normal(loc=10,scale=3,size=100)
    y = np.random.normal(loc=20,scale=3,size=100)
    z = np.random.normal(loc=30,scale=3,size=100)
    axes = plt.subplot()
    axes.plot(index,x,index,y,index,z)
    axes.legend(['plot','2nd plot','last plot'],loc=[0,1.05],ncol=3)
    axes.annotate(s='Important value',xy=[50,20],xytext=[15,35],fontsize=15,arrowprops={'arrowstyle':'->'})
     
     
    Out[359]:
    Text(15,35,'Important value')
     
     

    5、3D圖

     

    曲面圖

     

    導包

    • from mpl_toolkits.mplot3d.axes3d import Axes3D

    使用mershgrid函數切割x,y軸

    • X,Y = np.meshgrid(x, y)

    建立3d座標系

    • axes = plt.subplot(projection='3d')

    繪製3d圖形

    • p = axes.plot_surface(X,Y,Z,color='red',cmap='summer',rstride=5,cstride=5)

    添加colorbar

    • plt.colorbar(p,shrink=0.5)
    In [361]:
     
     
     
     
     
    from mpl_toolkits.mplot3d.axes3d import Axes3D
     
     
    In [376]:
     
     
     
     
     
    x = np.arange(100)
    y = np.arange(100)
    xx,yy = np.meshgrid(x,y)
    def create_z(xx,yy):
        return np.cos(xx)+np.sin(yy)
    z = create_z(xx,yy)
    print(z.shape)
    axes = plt.subplot(projection = '3d')
    p = axes.plot_surface(xx,yy,z,cmap='summer')
    plt.colorbar(p,shrink=0.5)
     
     
     
    (100, 100)
    
    Out[376]:
    <matplotlib.colorbar.Colorbar at 0x27fcc930>
     
    In [360]:
     
     
     
     
     
    x = np.array([1,2,3])
    y = np.array([4,5,6])
    xx,yy = np.meshgrid(x,y)
    display(xx,yy)
     
    . . .
     

    玫瑰圖/極座標條形圖

     

    建立極座標,設置polar屬性

    • plt.axes(polar = True)

    繪製極座標條形圖

    • index = np.arange(-np.pi,np.pi,2*np.pi/6)
    • plt.bar(x=index ,height = [1,2,3,4,5,6] ,width = 2*np.pi/6)
    In [379]:
     
     
     
     
     
    plt.axes(polar=True)
    index = np.arange(-np.pi,np.pi,2*np.pi/6)
    plt.bar(x=index,height=[2,3,4,5,6,7],width = 2*np.pi/6)
     
     
    Out[379]:
    <Container object of 6 artists>
     
相關文章
相關標籤/搜索