日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matplotlib——绘制图表

發布時間:2023/12/13 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matplotlib——绘制图表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 通過figure()函數創建畫布
  • 通過subplot()函數創建單個子圖
  • 通過subplots()函數創建多個子圖
  • 通過add_subplot()方法添加和選中子圖
  • 添加各類標簽
  • 繪制常見圖表
    • 繪制直方圖——hist()函數
    • 繪制散點圖——scatter()函數
    • 繪制柱狀圖——bar()函數
  • 設定線條的相關參數
  • 本地保存圖片


通過figure()函數創建畫布

在pyolot模塊中,默認擁有一個Figure對象,該對象可以理解為一張空白的畫布,用于容納圖標的各種組件,比如圖例、坐標軸等。

figure(num=None, # autoincrement if None, else integer from 1-N
figsize=None, # defaults to rc figure.figsize
dpi=None, # defaults to rc figure.dpi
facecolor=None, # defaults to rc figure.facecolor
edgecolor=None, # defaults to rc figure.edgecolor
frameon=True,
FigureClass=Figure,
clear=False,
**kwargs
)

部分參數表示的含義如下:

  • num:表示圖形的編號或名稱,數字代表編號,字符串表示名稱。如果沒有提供該參數,則會創建一個新的圖形,并且這個圖形的編號會增加;如果提供該參數,并且具有此id的圖形已經存在,則會將其激活并返回對其的引用,若此圖形不存在,則會創建并返回它。
  • figsize:用于設置畫布的尺寸,寬度、高度以英寸為單位。
  • dpi:設置圖形的分辨率。
  • facecolor:用于設置畫板的背景顏色。
  • edgecolor:用于顯示邊框原色。
  • frameon:表示是否顯示邊框。
  • FigureClass:派生自matplotlib.figure.Figure的類,可以選擇使用自定義的圖形對象。
  • clear:若設為True且該圖形已經存在,則它會被清除。

  • 創建新的畫布并返回Figure實例

    figure_obj = plt.figure() print(type(figure_obj))

    輸出結果:

    <class 'matplotlib.figure.Figure'>

    用type()查看figure_obj對象的類型,可以看出其是一個Figure類的對象。

    創建的新畫布:


    嘗試另創建一個背景顏色為灰色的新畫布,并在畫布上繪制一張折線圖:

    import matplotlib.pyplot as plt import numpy as npdata = np.arange(100, 201) plt.figure(facecolor='gray') plt.plot(data) plt.show()

    輸出結果:

    從輸出結果可以看出x軸的刻度范圍為0~100,y軸的刻度范圍為指定的數值區間。這是因為在調用plot()函數時,如果傳入了單個列表或數組,則會將其設為y軸序列,且自動生成x軸的序列。x軸的序列從0開始,與y軸序列具有相同的長度。


    通過subplot()函數創建單個子圖

    在同一個畫布上繪制多個圖形,Figure對象允許劃分為多個繪圖區域,每個繪圖區域都是一個Axes對象,它擁有屬于自己的坐標系統,被稱為子圖。

    subplot(nrows, ncols, index, **kwargs)

    參數表示的含義如下:

  • nrows,ncols:表示子區網格的行數、列數。
  • index:表示矩陣區域的索引。

  • subplot()函數會將整個繪圖區域等分為“nrows(行)× ncols(列)”的矩陣區域,之后按照從左到右、從上到下的順序對每個區域進行編號。從一開始依次遞增。

    如果nrows, ncols, index這三個參數的值都小于10,則可以把它們簡寫為一個實數,如subplot(2,2,3)可以寫成subplot(223)。

    創建單個子圖并在其上繪制簡單的圖形:

    data = np.arange(100, 201) plt.subplot(221) plt.plot(data, data) plt.subplot(2, 2, 2) plt.plot(data, -data) plt.subplot(212) plt.plot(data, data*2) plt.show()

    輸出結果:


    通過subplot()函數可以規劃Figure對象劃分為多少個字圖,但每調用一次該函數只會創建單個子圖。


    通過subplots()函數創建多個子圖

    如果希望一次性創建一組子圖,則可以通過subplots()函數進行實現。

    subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True,
    subplot_kw=None, gridspec_kw=None, **fig_kw):

    上述函數常用的參數含義如下:

  • nrows,ncols:表示子區網格的行數、列數,默認為1。
  • sharex,sharey:表示控制x或y軸是否共享。若設為“True”或“all”,則表示x或y軸在所有的子圖中共享;若設為“False”或“None”,則每個子圖的x或y軸是獨立的;若設為“row”,則每個子圖沿方向共享x軸或y軸;若設為“col”,則每個子圖沿方向共享x軸或y軸。
  • subplots()函數會返回一個元組,元組的第一個元素為Figure對象(畫布),第二個元素為Axes對象(子圖,包含坐標軸和畫的圖)或Axes對象數。如果創建的是單個子圖,則返回的是一個Axes對象,否則返回的是一個Axes對象數組。


    創建4個子圖,并在每個子圖上繪制一些簡單的圖形:

    # 生成包括100~200之間所有整數的數組 data = np.arange(100, 201)# 分成2*2的矩陣區域,返回子圖數組axes fig, axes = plt.subplots(2, 2) ax1 = axes[0, 0] ax2 = axes[0, 1] ax3 = axes[1, 0] ax4 = axes[1, 1] # 再選中的子圖上作圖 ax1.plot(data, data) ax2.plot(data, -data) ax3.plot(data, data**2) ax4.plot(data, np.log(data)) plt.show()

    輸出結果:


    通過add_subplot()方法添加和選中子圖

    想要創建子圖,除了使用pyplot模塊的函數之外, 還可以通過Figure類的add_subplot()方法添加和選中子圖。

    add_subplot(self, *args, **kwargs)

    上述方法中,*args參數表示一個三位數的實數或三個獨立的實數,用于描述子圖的位置。(具體用法類似于subplot()函數中的nrows, ncols, index參數。)

    注意: 每調用一次add_subplot()方法會規劃畫布劃分子圖,但只會添加一個子圖。當調用plot()函數繪制圖形時,會畫在最后一次指定子圖的位置上。


    創建具有兩行兩列的矩陣區域,且在編號為2的子圖上繪制圖形:

    # 通過add_subplot()方法添加和選中子圖 fig = plt.figure() # 添加子圖 fig.add_subplot(2, 2, 1) fig.add_subplot(2, 2, 4) fig.add_subplot(223) fig.add_subplot(2, 2, 2) # 在子圖上作圖,randn函數返回一個或一組樣本,具有標準正態分布。 random_arr = np.random.randn(100) # 默認是在最后一次使用subplot的位置上作圖,即編號為3的位置 plt.plot(random_arr) plt.show()

    輸出結果:

    上述示例中,首先創建了Figure類對象fig,然后調用add_subplot()方法將fig對象化分為一個2行2列的矩陣區域,且將圖形繪制在最后選中的編號為2的子區域上,調用plot()函數根據創建的隨機數組繪制折線圖。


    添加各類標簽

    圖表添加標簽和圖例的常用函數

    函 數 名 稱說 明
    title()設置當前軸的標題
    xlabel()設置當前圖形x軸的標簽名稱
    ylabel()設置當前圖形y軸的標簽名稱
    xticks()指定x軸刻度的數目與取值
    yticks()指定y軸刻度的數目與取值
    xlim()設置或獲取當前圖形x軸的范圍
    ylim()設置或獲取當前圖形y軸的范圍
    legend()在軸上放置一個圖例

    表中的函數之間是并列關系,沒有先后順序,既可以先繪制圖形,也可以先添加標簽。當然,添加圖例只能在繪制完成之后。


    在使用Matplotlib繪圖時,如果要設置的圖標標題中有中文字符,則會變成方格子而無法正確顯示。

    實際上Matplotlib是支持中文編碼的,出現這種情況主要是因為Matplotlib庫的配置信息里面沒有中文字體的相關信息,這是可以采用以下方式進行解決:

    在python腳本中動態設置matplotlib,這樣就可以避免由于更改配置文件而造成的麻煩。 from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 設置顯示中文字體 另外,由于字體更改以后會導致坐標軸中部分字符無法正常顯示,這是需要更改axes.unicode_minus參數。 mpl.rcParams['axes.unicode_minus'] = False # 設置正常顯示符號

    代碼實現:

    # 添加各類標簽 mpl.rcParams['font.sans-serif'] = ['SimHei'] # 設置顯示中文字體 mpl.rcParams['axes.unicode_minus'] = False # 設置正常顯示符號 data1 = np.arange(0, 1.8, 0.1) plt.title("陳丑丑的身高體重數據") # 添加標題 plt.xlabel("length") # x軸名稱 plt.ylabel("weight") # y軸名稱 plt.xticks(np.arange(0, 1.8, step=0.1)) plt.yticks(np.arange(0, 66, step=4)) plt.plot(data1, (data1**2)*20) # 繪制y=(x^2)*20曲線 plt.legend(["y=(x^2)*20"]) # 添加圖例 plt.show()

    輸出結果:


    繪制常見圖表

    繪制直方圖——hist()函數

    hist(
    x, bins=None, range=None, density=False, weights=None,
    cumulative=False, bottom=None, histtype=‘bar’, align=‘mid’,
    orientation=‘vertical’, rwidth=None, log=False, color=None,
    label=None, stacked=False, *, data=None, **kwargs)

    上述函數中常用參數表示的含義如下:

  • x:表示輸入值,可以是單個數組,或者是不需要相同長度的數組序列。
  • bins:表示繪制條柱的個數,默認為10。
  • range:bins的上下范圍(最大和最小值)。
  • color:表示條柱的顏色,默認為None。

  • 代碼實現:

    arr_random = np.random.randn(100) plt.hist(arr_random, bins=8, color='m', alpha=0.5) # alpha用于設置顏色深度——透明度 plt.show()

    輸出結果:

    上述示例中,首先創建了一個包含100個隨機數的數組,用來表示繪制圖形使用的數據,接著調用hist()函數繪制一個直方圖,這個直方圖共有8個條柱,每個條柱的顏色為品紅,透明度alpha為0.5。


    繪制散點圖——scatter()函數

    scatter(
    x, y, s=None, c=None, marker=None, cmap=None, norm=None,
    vmin=None, vmax=None, alpha=None, linewidths=None,
    verts=cbook.deprecation._deprecated_parameter,
    edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)

    上述函數中常用參數表示的含義如下:

  • x,y:表示x軸和y軸對應的數據。
  • s:指定散點的大小。若傳入的是一維數組,則表示每個點的大小。
  • c:指定散點的顏色。若傳入的是一維數組,則表示每個點的顏色。
  • marker:表示繪制的散點類型。
  • alpha:表示點的透明度,取值0~1之間。

  • 代碼實現:

    # 繪制散點圖 x = np.arange(21) y = np.random.rand(21)*10 plt.scatter(x, y, c='g', marker='*') plt.show()

    輸出結果:

    上述示例中,首先創建了一個包含整數0 ~ 20的數組,這些數值將作為散點圖中x軸對應的數據。其次創建了含有21個0 ~ 1之間的隨機數的數組,將它們乘以10的結果作為y軸對應的數據。散點的類型為星形。【關于線條的相關參數設置在本篇篇尾】


    繪制柱狀圖——bar()函數

    bar(
    x, height, width=0.8, bottom=None, *, align=‘center’,
    data=None, **kwargs)

    上述函數中常用參數表示的含義如下:

  • x:表示x軸的數據。
  • height:表示條形的高度。
  • width:表示條形的寬度,默認為0.8。
  • color:表示條形的顏色。
  • edgecolor:表示條形邊框的顏色。

  • 代碼實現:

    # 繪制柱狀圖 x1 = np.arange(5) # 從上下限范圍內隨機選取整數,創建兩個2行5列的數組 y1, y2 = np.random.randint(1, 91, size=(2, 5)) ax = plt.subplot(222) # 創建一個子圖 width = 0.25 # 條形的寬度 ax.bar(x1, y1, width=width, color='r') # 繪制紅色的柱形圖 ax.bar(x1+width, y2, width=width, color='g') # 繪制另一個綠色的柱形圖 ax.set_xticks(x1+0.1) # 設置x軸的刻度 ax.set_xticklabels(['a', 'b', 'c', 'd', 'e']) # 設置x軸的標簽 plt.show()

    輸出結果:

    上述示例中,首先創建了包含整數0 ~ 4的數組,將其作為x軸的數據;接著又創建了兩個2行5列的二維數組,它們的數據是從1 ~ 30內隨機選取的整數,然后再指定編號為2的子圖上,調用bar()函數繪制了兩個柱形圖。第一個柱形圖x,y軸的數據設為x1、y1,顏色為紅色。第二個柱形圖x,y軸使用的數據為x+width和y2,顏色為綠色,最后設置了x軸的刻度標簽為“a、b、c、d、e”。


    設定線條的相關參數

    線條顏色使用color參數控制

    顏 色 值說 明
    b(blue)藍色
    g(green)綠色
    r(red)紅色
    c(cyan)青色
    m(magenta)品紅
    y(yellow)黃色
    k(black)黑色
    w(white)白色

    標記風格使用marker參數控制

    標記風格值說 明
    o實心圓圈
    D菱形
    h六邊形1
    H六邊形2
    8八邊形
    p五邊形
    +加號
    .
    s正方形
    *星形
    v倒三角形
    ^正三角形
    >一角朝右的三角形
    <一角朝左的三角形

    線型使用linestyle參數控制

    線型值說明
    -實線
    長虛線
    -.短點相間線
    :短虛線

    代碼示例:

    data2 = np.arange(1, 3, 0.3) plt.plot(data2, marker="x", linestyle='--') plt.plot(data2+1, marker='o', linestyle=':') plt.plot(data2+2, color='k', marker='s', linestyle='-.')

    輸出結果:

    代碼示例:

    # 等價于 plt.plot(data2, 'x--', data2+1, 'o:', data2+2, 'ks-.')

    輸出結果:


    本地保存圖片

    想要保存當前生成的圖表,可以調用savefig()函數進行保存。

    savefig(*args, **kwargs)

    上述函數中,有fname參數——一個包含文件名路徑的字符串,或者是一個類似于Python文件的對象。
    如果format參數設為None且fname參數是一個字符串,則輸出格式將根據文件名的擴展名推導出來。

    使用savefig()函數將圖片保存在指定的目錄下,具體代碼實現如下(在show()函數錢插入):

    data2 = np.arange(1, 3, 0.3) plt.plot(data2, marker="x", linestyle='--') plt.plot(data2+1, marker='o', linestyle=':') plt.plot(data2+2, color='k', marker='s', linestyle='-.') # 等價于 plt.plot(data2, 'x--', data2+1, 'o:', data2+2, 'ks-.')# 本地保存圖片 plt.savefig(r"D:\數據分析\demo.png") plt.show() print("over!")

    輸出結果:

    在操作完成后使用print(“over!”)輸出上圖結果作為執行結束提示。

    可以從相應路徑中打開文件以檢查是否成功保存。

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的Matplotlib——绘制图表的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。