国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
python數(shù)據(jù)分析工具之 matplotlib詳解
userphoto

2022.06.12 上海

關注

python數(shù)據(jù)分析工具之 matplotlib詳解

    • matplotlib基礎
  • 安裝
    • 線形圖
    • 散點圖
    • 直方圖
    • 子圖
    • 圖例配置
    • 三維圖
    • pandas繪圖

不論是數(shù)據(jù)挖掘還是數(shù)學建模,都免不了數(shù)據(jù)可視化的問題。對于 Python 來說,matplotlib
是最著名的繪圖庫,它主要用于二維繪圖,當然也可以進行簡單的三維繪圖。它不但提供了一整套和 Matlab 相似但更為豐富的命令,讓我們可以非??旖莸赜?br data-filtered="filtered"> python 可視化數(shù)據(jù)。

matplotlib基礎

安裝

pip install matplotlib

兩種繪圖風格

MATLAB風格:

基本函數(shù)是 plot,分別取 x,y 的值,然后取到坐標(x,y)后,對不同的連續(xù)點進行連線。

面向對象:

創(chuàng)建一個圖形 fig 和一個坐標 ax 。

  • fig:figure(plt.Figure) 是一個能容納各種坐標軸,圖形,文字和標簽的容器。
  • ax:axes(plt.Axes) 是一個帶有刻度和標簽的矩形,最終會包含各種可視化元素。

示例:


    import matplotlib.pyplot as plt
    import numpy as np
    
    # 圖形顯示風格
    plt.style.use('seaborn-whitegrid')
    
    # 創(chuàng)建fig和ax
    fig = plt.figure()
    ax = plt.axes()
    
    x = np.linspace(0,10,100)
    # 顯示sin函數(shù)圖形
    plt.plot(x, np.sin(x))
    # 顯示cos函數(shù)圖形
    plt.plot(x, np.cos(x))
    
    plt.show()

這就是利用面向對象的方式繪圖,在交互模式中可以看到,每畫一個圖就是產(chǎn)生一個對象,最后再顯示出來。

繪圖樣式


    # 調(diào)整坐標軸上下限
    plt.xlim([xmin, xmax])
    plt.ylim([ymin, ymax])
    
    plt.axis([xmin, xmax, ymin, ymax])
    # 參數(shù):tight:把圖形設置成緊湊模式,不留多余的部分
    # equal:圖形顯示分辨率為1:1

線形圖

文字設置

圖形標題:plt.title

坐標軸標題:plt.xlabel, plt.ylabel

基礎圖例:plt.legend

注意:對中文不友好,需要額外方法,盡量使用英文


    # 示例
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(1, 10, 100)
    plt.plot(x, np.sin(x))
    plt.title('sin-function')
    plt.xlabel('x-value')
    plt.ylabel('y-label')
    plt.show()

圖例

通過legend可以設置圖例,同時通過參數(shù)的調(diào)整可以細膩的設置圖例的位置、形式等。參數(shù)主要包括:

  • loc:圖例的位置
  • frameon:是否帶邊框
  • framealpha:顏色透明
  • shadow:陰影

    # 示例
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(1, 10, 100)
    
    fig, ax = plt.subplots()
    
    ax.plot(x, np.sin(x), color='red', label='sin-function')
    ax.plot(x, np.cos(x), color='blue', label='cos-function')
    
    ax.legend(loc='upper right', frameon=True, shadow=True, framealpha=0.2)
    # 設置圖例位置為右上,有邊框,有陰影,且透明度為0.2
    
    plt.show()

顏色條


    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(1, 10, 100)
    I = np.sin(x) * np.cos(x[:,np.newaxis])
    
    plt.imshow(I)
    plt.colorbar()
    plt.show()

散點圖

散點圖基礎

散點圖主要以點為主,數(shù)據(jù)是不連續(xù)的數(shù)據(jù),通過設置線的型號來完成。型號包括'o’、'+’、'*’、'1’、'h’、'D’等等,具體使用探索一下就好,用不到太多。


    import matplotlib.pyplot as plt
    import numpy as np
    
    # 圖形顯示風格
    plt.style.use('seaborn-whitegrid')
    
    x = np.linspace(0, 10, 30)
    y = np.sin(x)
    
    # 通過設置線型為點來完成散點圖的繪制
    plt.plot(x, y, 'o', color='blue')
    plt.show()

如果設置線型為點線結合,那么將繪制出連續(xù)的線,對應點處為所設置的點型。

畫散點圖還可以使用scatter函數(shù)來畫,他有很多更細節(jié)的描述,用法與plot類似,對于數(shù)據(jù)量較大的可視化時,plot的效率更高一些。

誤差線


    import matplotlib.pyplot as plt
    import numpy as np
    
    # 圖形顯示風格
    plt.style.use('seaborn-whitegrid')
    
    x = np.linspace(0, 10, 30)
    dy = x * 0.5
    y = np.sin(x) + dy
    
    plt.errorbar(x, y, yerr=dy, fmt='.k', ecolor='blue')
    plt.show()

連續(xù)誤差線表示的是連續(xù)量,可以使用 plt.plot 和 plt.fill_between 來畫出。


    import matplotlib.pyplot as plt
    import numpy as np
    
    # 圖形顯示風格
    plt.style.use('seaborn-whitegrid')
    
    x = np.linspace(0, 10, 30)
    ysin = np.sin(x)
    ycos = np.cos(x)
    
    plt.plot(x, ysin, color='red')
    plt.plot(x, ycos, color='blue')
    
    plt.fill_between(x, ysin, ycos, color='gray', alpha=0.2)
    plt.show()

等高線(密度)

  • plt.contour 等高線
  • plt.contourf 自帶填充顏色
  • plt.imshow 顯示圖形

等高線繪制方法:z = f(x,y),z表示高度。當只有一個顏色繪圖時,虛線表示負值,實線表示正值。meshgrid 可以將一維數(shù)據(jù)變成二維網(wǎng)格數(shù)據(jù)。


    import matplotlib.pyplot as plt
    import numpy as np
    
    def f(x, y):
     return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
    
    x = np.linspace(0, 5, 50)
    y = np.linspace(0, 5, 40)
    
    # 得到網(wǎng)格點矩陣
    x, y =np.meshgrid(x, y)
    
    # 計算z軸的值
    z = f(x, y)
    
    # 繪制圖形
    plt.contour(x, y, z, colors='green')
    # plt.contour(x, y, z, 50, cmap='RdGy') # 更改配色,值50等分,紅灰配色
    plt.show()

plt.contourf(x, y, z, 50, cmap='RdGy’) # 改為contourf,自動填充顏色,則變?yōu)檫B續(xù)的

直方圖

基本畫法:plt.hist 可以直接畫直方圖,參數(shù)主要包括:

  • bins:劃分段(柱數(shù))
  • color:顏色
  • alpha:透明度
  • histtype:圖類型

    import matplotlib.pyplot as plt
    import numpy as np
    
    data = np.random.randn(1000)
    plt.hist(data, bins=30, alpha=0.3, histtype='stepfilled', color='blue', edgecolor='none')
    plt.show()

程序中 random.randnrandom.rand 相比,randn表示隨機生成的數(shù)符合正態(tài)分布,因此畫出圖來是如上圖所示。

子圖


    plt.subplot(2,1,1) # 子圖,(2,1,1)代表,創(chuàng)建2*1的畫布,并且定位于畫布1 ;等效于plt.subplot(211),即去掉逗號
    # subplots 可以同時創(chuàng)建多個子圖
    figure,ax = plt.subplots(2, 3) 
    # 這是一個靈活創(chuàng)建子圖的方法,可以創(chuàng)建任意組合的圖形,不必一一對齊,以下為示例:
    grid = plt.GridSpec(2, 3, wspace=0.3, hspace=0.2)
    plt.subplot(grid[,:2])
    plt.subplot(grid[1,1:3])

圖例配置

文字注釋

通過不同的坐標變換,可以把文字放在不同的位置:

  • ax.transData:以數(shù)據(jù)為基準
  • ax.transAxes:以軸為基準

    import matplotlib.pyplot as plt
    import numpy as np
    
    fig, ax = plt.subplots()
    ax.axis = ([0, 1, 0, 1])
    
    ax.text(0.5, 0.5, "Data:(0.5, 0.5)", transform=ax.transData)
    ax.text(0.5, 0.1, "Axes:(0.5, 0.1)", transform=ax.transAxes)
    plt.show()

箭頭注釋

  • plt.arrow:產(chǎn)生SVG向量圖形式的箭頭,會隨著分辨率改變而改變,不推薦
  • plt.annotate:可以創(chuàng)建文字和箭頭

    import matplotlib.pyplot as plt
    import numpy as np
    
    fig, ax = plt.subplots()
    
    x = np.linspace(0, 20, 1000)
    ax.plot(x, np.cos(x))
    ax.axis('equal')
    
    ax.annotate("max", xy=(6.28, 1), xytext=(10, 4), arrowprops=dict(facecolor='black', shrink=0.05))
    ax.annotate('min', xy=(5 * np.pi, -1), xytext=(2, -6), arrowprops=dict(arrowstyle="->", connectionstyle='angle3, angleA=0, angleB=-90'))
    plt.show()

三維圖

基礎三維圖

matplotlib 中繪制三維圖用到 mplot3d 包。導入 mplot3d 包后,可以利用 projection 參數(shù),控制繪制三維圖。


    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits import mplot3d
    
    fig = plt.figure()
    ax = plt.axes(projection='3d')
    
    plt.show()

三維圖中當然包含三個軸,x,y,z。畫線 ax.plot3D,畫點 ax.scatter3D。為了三維效果,它會自動將遠處的點顏色變淺。


    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits import mplot3d
    
    fig = plt.figure()
    ax = plt.axes(projection='3d')
    
    z = np.linspace(0, 15, 100)
    x = np.sin(z)
    y = np.cos(z)
    
    ax.plot3D(x, y, z, 'red')
    ax.scatter3D(x, y, z, 'blue')
    plt.show()

三維等高線


    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits import mplot3d
    
    fig = plt.figure()
    ax = plt.axes(projection='3d')
    
    def f(x, y):
     return np.sin(np.sqrt(x ** 2 + y ** 2))
    
    x = np.linspace(-6, 6, 30)
    y = np.linspace(-6, 6, 30)
    X, Y =np.meshgrid(x, y)
    Z = f(X, Y)
    
    ax.contour3D(X, Y, Z, 50)
    plt.show()

圖形繪制出來后,可以通過 ax.view_init 來控制觀察的角度,便于理解。

  • 俯仰角度:x-y 平面的旋轉角度
  • 方位角度:沿著 z 軸順時針旋轉角度

pandas繪圖

上篇文章講述了 pandas 的基本用法,pandas 是數(shù)據(jù)分析中最重要的工具之一,這里補充一下 pandas 繪圖。

Series繪圖


    # 這是一個小栗子
    s1 = Series(np.random.randint(1000).cumsum()) # 創(chuàng)建series,cumsum()是指疊加求和,本位數(shù)是前幾項之和
    s1.plot() # series有自己的plot函數(shù),里面可以寫入想要的參數(shù)

DataFrame繪圖


    df = DataFrame(
     np.random.randint(1,10,40).reshape(10,4),
     columns=['A','B','C','D']
     )
    df.plot()
    # dataframe也有自己的plot,按列畫出來,參數(shù)包含ax,選擇輸出的畫布
    # 參數(shù):stacked=True,表示一個堆疊的情況,同一個index下,columns一不同顏色疊在一起

總結

到此這篇關于python數(shù)據(jù)分析工具之 matplotlib詳解的文章就介紹到這了,更多相關python數(shù)據(jù)分析

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python Matplotlib簡易教程
Python可視化.1
硬肝!超詳細matplotlib基礎介紹?。?!
python的matplotlib的三角函數(shù)sin和cos的靜態(tài)作圖詳解
python插值
【免費贈書】Python如何實現(xiàn)數(shù)據(jù)可視化?
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服