數據展現Matplotlib

主要內容是Matplotlib庫的基本使用和方法html

1 Matplotlib庫

1.1 Matplotlib的介紹

  Python優秀的數據可視化第三方庫python

  數據可視化就是將數據以特定的圖形圖像的方式展現出來, 使數據更加的直觀明瞭編程

  範例網站數組

  Matplotlib庫是由各類可視化類構成, 內部結構複雜dom

  爲了簡潔使用, 能夠使用matplotlib.pyplot這個繪製各種可視化圖形的命令子庫, 相似於快捷方式的庫來簡化操做編程語言

  導入函數

import matplotlib.pyplot as plt

    一樣plt也是約定俗成的別名佈局

  基本使用學習

    使用plt.plot(數組)傳入數組, 若是隻有一個一維數組, 那麼數組的值會指定給Y軸, X軸爲他們的索引值字體

    使用plt.ylabel(名字)設置Y軸的名字

    使用plt.savefig(文件名, dpi=dpi的大小)保存圖像爲圖像文件, dpi通常設置爲600, 默認是PNG格式保存

    使用plt.show()在IPython中展現生成的圖形

    使用plt.axis([x1, x2, y1, y2])能夠設置X軸的起點和終點, Y軸的起點和終點

    相關代碼以下

import matplotlib.pyplot as plt

plt.plot([0, 2, 4, 6, 8], [3, 1, 4, 5, 2])
plt.ylabel("Y")
plt.axis([-1, 10, 0, 6])
plt.savefig("test", dpi=600)
plt.show()

    相關結果以下

    

  pyplot的繪圖區域

    使用plt.subplot(nrows, ncols, plot_number)在全局繪圖區域中建立一個分區體系, 而後指定在哪一個子區域裏繪圖

    其中nrows表示橫向劃分多少的區域, ncols表示縱向劃分多少的區域, 子區域的標號是從1開始的, 從上到下從左到右依次排序

    另外在數量小的時候, 這三個參數之間的逗號能夠去掉

    具體代碼以下

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

a = np.arange(0.0, 5.0, 0.02)

plt.subplot(211)
plt.plot(a, f(a))

plt.subplot(2,1,2)
plt.plot(a, np.cos(2*np.pi*a), 'r--')
plt.show()

    具體效果以下

    

1.2 pyplot的plot()函數

  plot()的具體形式以下:

plt.plot(x, y, format_string, **kwargs)

    x: X軸的數據, 能夠是列表或者數組, 可選項, 可是當繪製多條曲線的時候, 各條曲線的x不能省略

    y: Y軸的數據, 列表或數組, 必填項

    format_string: 控制曲線的格式的字符串, 可選項

    **kwargs: 第二組或更多的 (x, y, format_string)

    繪製多條圖像

import numpy as np
import matplotlib.pyplot as plt

a = np.arange(10)
plt.plot(a, 1.5*a, a, 2.5*a, a, 3.6*a, a, 4.5*a)
plt.show()

    結果爲

    

  曲線的格式控制

    format_string由制顏色字符, 風格字符和標記字符組成

    具體有

    

    

    

    更改以前的風格代碼

import numpy as np
import matplotlib.pyplot as plt

a = np.arange(10)
plt.plot(a, 1.5*a, 'go-', a, 2.5*a, 'rx', a, 3.6*a, '*', a, 4.5*a, 'b-.')
plt.show()

    效果爲

    

  關於**kwargs

    能夠添加更多更詳細的參數

    color: 控制顏色, color="green"

    linestyle: 線條風格, linestyle="dashed"

    marker: 標記風格, marker="o", 這三個和前面的format是對應的, 此外還有

    markerfacecolor: 標記的顏色, markerfacecolor="blue"

    markersize: 標記的尺寸, markersize=20

    ...

1.3 pyplot的中文顯示

  默認狀況下, pyplot並不支持中文字符, 在最開始的折線圖中, 若是設置ylabel()爲中文, 則在圖像中不能正常顯示

  要顯示中文有種辦法

  1) 使用rcParams

    設置其font.family爲中文字符

    具體代碼以下

import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family'] = 'SimHei' 
plt.plot([0, 2, 4, 6, 8], [3, 1, 4, 5, 2])
plt.ylabel("Y軸座標")
plt.axis([-1, 10, 0, 6])
plt.savefig("test", dpi=600)
plt.show()

    具體效果

    

      其中SimHei是黑體

    具體更多參數

    

    相應的中文字體種類

    

    參考實例

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family'] = 'FangSong' 
matplotlib.rcParams['font.size'] = 20
                  
a = np.arange(0.0, 5.0, 0.02)

plt.xlabel("X軸: 時間")
plt.ylabel("Y軸: 振幅")

plt.plot(a, np.cos(2*np.pi*a)+1, 'r--')
plt.savefig('test2', dpi=600)
plt.show()

    效果爲

  

  2) 增長 fontproperties屬性

    在上述的例子中, 能夠在xlabel中增長參數fontproperties來限定顯示的字體, 用此來解決中文顯示

    具體代碼以下

import numpy as np
import matplotlib.pyplot as plt
                  
a = np.arange(0.0, 5.0, 0.02)

plt.xlabel("X軸: 時間", fontproperties="FangSong", fontsize=20)
plt.ylabel("Y軸: 振幅", fontproperties="FangSong", fontsize=20)

plt.plot(a, np.cos(2*np.pi*a)+1, 'r--')
plt.show()

  兩種方法的區別就是第一種是全局修改, 第二種是指定修改

  建議使用第二種方法, 可是爲了統一能夠使用方法一

1.4 pyplot的文本顯示

  常見的文本顯示函數是

    

    其中title會在整個圖形的正中上放寫上文字

  具體實例以下

import numpy as np
import matplotlib.pyplot as plt

a = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a)+2, 'r--')


plt.xlabel("X軸: 時間", fontproperties="FangSong", fontsize=15, color='green')
plt.ylabel("Y軸: 振幅", fontproperties="FangSong", fontsize=15)
plt.title(r'正玄波實例$y=cos(2\pi x)$', fontproperties="SimHei", fontsize=25)
plt.text(2, 3, r'$\mu=100$', fontsize=15)

plt.axis([-1, 6, 0, 4])
plt.grid(True)
plt.savefig('test3', dpi=600)
plt.show()

  效果爲

  

  其中$$這種是LeTeX的語法

  title()第一個參數表示橫座標的位置, 第二個參數是縱座標的位置

  grid(True)增長網格顯示

  關於annotate函數

plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict)

    s: 要註解的字符串

    xy: 箭頭所在的位置, 元組類型

    xytext: 文本顯示的位置, 元組類型

    arrowprops: 定義了整個箭頭顯示的屬性, dict()

      facecolor="顏色" 箭頭的顏色

      shrink 起始會按照指定的比例縮進, 這樣箭頭與兩邊的內容會留有一下空白

      width 箭頭的寬度

  具體代碼以下

import numpy as np
import matplotlib.pyplot as plt

a = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a)+2, 'r--')


plt.xlabel("X軸: 時間", fontproperties="FangSong", fontsize=15, color='green')
plt.ylabel("Y軸: 振幅", fontproperties="FangSong", fontsize=15)
plt.title(r'正玄波實例$y=cos(2\pi x)$', fontproperties="SimHei", fontsize=25)
plt.annotate(r"$\mu=100$", xy=(2, 3), xytext=(3, 3.5), arrowprops=dict(
        facecolor="black", shrink=0.1, width=2
        ))

plt.axis([-1, 6, 0, 4])
plt.grid(True)
plt.savefig('test3', dpi=600)
plt.show()

  效果爲

  

1.5 繪製子繪圖區域

  使用subplot能夠進行簡單的分區, 具體實現複雜的分區須要另外一個函數

  plt.subplot2grid() 

plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)

    基本使用方法是: 先將整個佈局進行均分, 而後指定一塊小區域做爲起始點, 而後使用colspan和rowspan來在橫向和縱向上增長小塊的個數

    GridSpec: 總體劃分, 元組類型

    CurSpec: 指定起始小塊位置, 元組類型

    colspan: 橫向小塊數量

    rawspan: 縱向小塊數量

    選擇實例:

    

  使用GridSpec類能夠簡化操做

    導入

import matplotlib.gridspec as gridspec

    生成gridspec對象

gs = gridspec.GridSpec(3, 3)

    使用切片的方式來獲取

    具體以下

    

2 基礎繪圖函數

2.1 基礎圖標函數概述

  使用繪製函數的基本思想:

    圖像的種類是繁多的, 咱們應該專一於選擇與更合適的圖表來結合數據, 而不是學習使用全部的函數

  

  

  

2.2 餅圖的繪製

  經常使用於百分比的內容, 尤爲是須要對比組成部分, 佔有比例的時候, 更是直觀

  生成餅圖的函數pie

plt.pie(sizes, explode=(), labels=(), autopct="", shadow=False, startangle=90)

    sizes: 元組類型, 各個成分的佔比

    explode: 元組類型, 優先級, 優先級高的會突出來, 爲0是正常組成部分

    labels: 各個部分對應的標籤名字, 要和sizes對應上

    autopct: 顯示比例的格式

    shadow: 是否有陰影

    startangle: 起始繪圖時候的角度, 和極座標角度相似

  具體實例

import matplotlib.pyplot as plt

labels = "Python", "Java", "C/C++", "C#", "Javascript", "Other"
sizes = [31.2, 19.6, 15.9, 7.4, 3.6, 22.3]
explode = [0.1, 0, 0 ,0 , 0, 0]

plt.pie(sizes, explode=explode, labels=labels, autopct="%.2f%%", shadow=True, startangle=90)

plt.title(r'2015最受歡迎的編程語言', fontproperties="SimHei", fontsize=15)
plt.show()

  具體效果

  

  若是但願圖形不是側着的, 能夠使用

plt.axis('equal')

2.3 直方圖的繪製

  使用hist畫直方圖

hist(x, bins, normed, histtype, facecolor, alpha)

    x: 處理的數據

    bins: 生成的圖形中, 直方(在X軸上直立的長條矩形)的個數

      具體狀況是: 找到x中的最小值和最大值, 而後在這個值域中均分bins份, 每一份都是一個小的值域, x中的元素就會對應的落在相應的值域中, Y軸的值就是在這個值域的數量(normed=False時)

    normed: 爲True會歸一化成機率, 爲False時Y軸顯示的是數量, 默認爲False

    具體代碼以下

import numpy as np
import matplotlib.pylab as plt

np.random.seed(0)
mu, sigma = 100, 20
a = np.random.normal(mu, sigma, size=100)


plt.hist(a, 30, normed=False, histtype='stepfilled', facecolor='b',
         alpha=0.75)
plt.title("Histogram")

plt.show()

  效果以下

  

2.4 極座標的繪製

  繪製極座標用

ax = plt.subplot(111, projection='polar')

    經過生成一個對象ax, 來繪製極座標的圖像

    經過ax.bar()來設置圖像

bar(left, height, width=0.8, bottom=None, **kwargs)

      left: 繪製極座標時的開始位置, 圖中的某個位置

      height: 中心點向邊界延伸的長度

      width: 旋轉的寬度

  具體代碼以下

import matplotlib.pylab as plt
import numpy as np

N = 20
theta = np.linspace(0.0, 2*np.pi, N, endpoint=False)
radii = 10*np.random.rand(N)
width = np.pi/4*np.random.rand(N)

ax = plt.subplot(111, projection='polar')
bars = ax.bar(theta, radii, width=width, bottom=0.0)

for r, bar in zip(radii, bars):
    bar.set_facecolor(plt.cm.viridis(r/10.))
    bar.set_alpha(0.5)

plt.show()

  具體效果爲

  

2.5 散點圖的繪製

  具體代碼

import matplotlib.pylab as plt
import numpy as np

fig, ax = plt.subplots()
ax.plot(10*np.random.random(100), 10*np.random.randn(100), 'o')
ax.set_title("simple Scatter")

plt.show()

  具體效果

  

3 引力波的繪製

3.1 介紹

  引力波是由於時空彎曲對外以輻射形式傳播的能量

  愛因斯坦的廣義相對論預言了引力波的存在

3.2 編寫

  產生時間序列

  讀取應變數據

  繪製H1 Strain

  顯示並保存圖像   

相關文章
相關標籤/搜索