matlibplot繪製各種圖形

  • 2019 年 10 月 5 日
  • 筆記

matlibplot繪製各種圖形

0.導語1.預備知識1.1 np.arange()1.2 numpy.random.uniform()1.3 zip()2.bar繪製3.散點圖4.3D圖5.參考文章6.作者的話

0.導語

上次出了一篇matlibplot基礎篇,本篇來主要學習matlibplot的各種圖繪製!下面一起來嗨吧!!!

1.預備知識

1.1 np.arange()

np.arange()返回的是numpy.ndarray() 三個參數(first,last,step) last必須提供,默認first從0開始,step為1, 生成的ndarray(),只包含first,不包含last

np.arange(3.0)  Out[6]: array([0., 1., 2.])  np.arange(1,3.0,.5)  Out[7]: array([1. , 1.5, 2. , 2.5])  

1.2 numpy.random.uniform()

函數原型:numpy.random.uniform(low,high,size) 功能:從一個均勻分布[low,high)中隨機取樣,注意定義域是左閉右開,即包含low,不包含high. 參數介紹: low: 取樣下界,float類型,默認值為0; high: 取樣上界,float類型,默認值為1; size: 輸出樣本數目,為int或元組(tuple)類型,例如,size=(m,n,k), 則輸出mnk個樣本,預設時輸出1個值。 返回值:ndarray類型,其形狀和參數size中描述一致。 這裡順便說下ndarray類型,表示一個N維數組對象,其有一個shape(表維度大小)和dtype(說明數組數據類型的對象), 使用zeros和ones函數可以創建數據全0或全1的數組,原型: numpy.ones(shape,dtype=None,order='C'), 其中,shape表數組形狀(m*n),dtype表類型,order表是以C還是fortran形式存放數據。

1.3 zip()

zip() 函數用於將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。 如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同,利用 * 號操作符,可以將元組解壓為列表。 zip([iterable, …]) iterabl — 一個或多個迭代器; 返回值 返回元組列表.

>>>a = [1,2,3]  >>> b = [4,5,6]  >>> c = [4,5,6,7,8]  >>> zipped = zip(a,b)     # 打包為元組的列表  [(1, 4), (2, 5), (3, 6)]  >>> zip(a,c)              # 元素個數與最短的列表一致  [(1, 4), (2, 5), (3, 6)]  >>> zip(*zipped)          # 與 zip 相反,可理解為解壓,返回二維矩陣式  [(1, 2, 3), (4, 5, 6)]  

2.bar繪製

實現

import matplotlib.pyplot as plt  import numpy as np    # 生成n個柱狀圖  n = 12    X = np.arange(n) # [0,12)範圍步長為1的array  '''  print(X)  print(X/float(n))  print(1-X/float(n))  '''  Y1 = (1-X/float(n)) * np.random.uniform(0.5, 1.0, n)  Y2 = (1-X/float(n)) * np.random.uniform(0.5, 1.0, n)    plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')  plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')  for x,y in zip(X,Y1):      # ha: horizontal alignment      # va: vertical alignment      plt.text(x, y, '%.2f' % y, ha='center', va='bottom')    for x,y in zip(X,Y2):      # ha: horizontal alignment      # va: vertical alignment      plt.text(x, -y, '%.2f' % y, ha='center', va='top')    plt.xlim(-1,n)  plt.xticks(())  plt.ylim(-1.25, 1.25)  plt.yticks(())  plt.show()  

輸出

3.散點圖

實現

import matplotlib.pyplot as plt  import numpy as np    n=1024  X=np.random.normal(0,1,n)  Y=np.random.normal(0,1,n)  T=np.arctan2(Y,X) # for color value  plt.scatter(X,Y,s=75,c=T,alpha=0.5)  plt.xlim(-1.5,1.5)  plt.ylim(-1.5,1.5)  plt.xticks(()) # 隱藏x軸內容  plt.yticks(()) # 隱藏y軸內容  plt.show()  

輸出

4.3D圖

實現

import numpy as np  import matplotlib.pyplot as plt  from mpl_toolkits.mplot3d import Axes3D  fig=plt.figure()  ax=Axes3D(fig)  X=np.arange(-4, 4, 0.25)  Y = np.arange(-4, 4, 0.25)  X,Y=np.meshgrid(X,Y)  R=np.sqrt(X**2+Y**2)  # height value  Z=np.sin(R)  # rstride行跨,cstride列跨  ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))  # 投影 offset表示把圖形壓縮到xoy面,z=-2的位置,zdir換成x,y類似  ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap='rainbow')  ax.set_zlim(-2,2)  plt.show()  

輸出

5.參考文章

https://morvanzhou.github.io/tutorials/data-manipulation/plt/2-1-basic-usage/

6.作者的話

以上學習了matlibplot相關圖的繪製,希望各位能夠有所收穫!