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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

matplotlib实践过程总结

發布時間:2024/1/23 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matplotlib实践过程总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過本手冊,你將收獲以下知識:

  • matplotlib 及環境配置
  • 數據圖的組成結構,與 matplotlib 對應的名稱
  • 常見的數據繪圖類型,與繪制方法

您可能需要以下的準備與先修知識:

  • Python開發環境及matplotlib工具包
  • Python基礎語法
  • Python numpy 包使用
  • 1.matplotlib 安裝配置

    linux可以通過以下方式安裝matplotlib

    sudo pip install numpy sudo pip install scipy sudo pip install matplotlib

    windows強烈推薦大家使用anaconda

    2.一幅可視化圖的基本結構

    通常,使用 numpy 組織數據, 使用 matplotlib API 進行數據圖像繪制。 一幅數據圖基本上包括如下結構:

    • Data: 數據區,包括數據點、描繪形狀
    • Axis: 坐標軸,包括 X 軸、 Y 軸及其標簽、刻度尺及其標簽
    • Title: 標題,數據圖的描述
    • Legend: 圖例,區分圖中包含的多種曲線或不同分類的數據

    其他的還有圖形文本 (Text)、注解 (Annotate)等其他描述


3.畫法

下面以常規圖為例,詳細記錄作圖流程及技巧。按照繪圖結構,可將數據圖的繪制分為如下幾個步驟:

  • 導入 matplotlib 包相關工具包
  • 準備數據,numpy 數組存儲
  • 繪制原始曲線
  • 配置標題、坐標軸、刻度、圖例
  • 添加文字說明、注解
  • 顯示、保存繪圖結果

下面是一個包含cos、sin、sqrt函數的完整圖像:


3.1導包

會用到 matplotlib.pyplot、pylab 和 numpy

In?[3]: #coding:utf-8%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltfrom pylab import *

3.2準備數據

numpy 常用來組織源數據:

In?[2]: # 定義數據部分 x = np.arange(0., 10, 0.2) y1 = np.cos(x) y2 = np.sin(x) y3 = np.sqrt(x) ? #x = all_df['house_age'] #y = all_df['house_price']

3.3繪制基本曲線

使用 plot 函數直接繪制上述函數曲線,可以通過配置 plot 函數參數調整曲線的樣式、粗細、顏色、標記等:

In?[3]: # 繪制 3 條函數曲線# $y=\sqrt{x}$plt.rcParams["figure.figsize"] = (12,8)plt.plot(x, y1, color='blue', linewidth=1.5, linestyle='-', marker='.', label=r'$y = cos{x}$')plt.plot(x, y2, color='green', linewidth=1.5, linestyle='-', marker='*', label=r'$y = sin{x}$')plt.plot(x, y3, color='m', linewidth=1.5, linestyle='-', marker='x', label=r'$y = \sqrt{x}$')Out[3]:[<matplotlib.lines.Line2D at 0x7f8a7956e910>]

2.3.1 關于顏色的補充

主要是color參數:

  • r 紅色
  • g 綠色
  • b 藍色
  • c cyan
  • m 紫色
  • y 土黃色
  • k 黑色
  • w 白色

3.3.2 linestyle 參數

linestyle 參數主要包含虛線、點化虛線、粗虛線、實線,如下:


3.3.3 marker 參數

marker參數設定在曲線上標記的特殊符號,以區分不同的線段。常見的形狀及表示符號如下圖所示:


3.4 設置坐標軸

可通過如下代碼,移動坐標軸 spines

In?[6]: # 坐標軸上移 ax = plt.subplot(111) #ax = plt.subplot(2,2,1) ax.spines['right'].set_color('none') # 去掉右邊的邊框線 ax.spines['top'].set_color('none') # 去掉上邊的邊框線 # 移動下邊邊框線,相當于移動 X 軸 ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data', 0)) # 移動左邊邊框線,相當于移動 y 軸 ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0))

可通過如下代碼,設置刻度尺間隔 lim、刻度標簽 ticks

In?[7]: # 設置 x, y 軸的刻度取值范圍plt.xlim(x.min()*1.1, x.max()*1.1)plt.ylim(-1.5, 4.0)# 設置 x, y 軸的刻度標簽值plt.xticks([2, 4, 6, 8, 10], [r'two', r'four', r'6', r'8', r'10'])plt.yticks([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], [r'-1.0', r'0.0', r'1.0', r'2.0', r'3.0', r'4.0'])Out[7]:([<matplotlib.axis.YTick at 0x1071a2250>,<matplotlib.axis.YTick at 0x10718d910>,<matplotlib.axis.YTick at 0x10729d810>,<matplotlib.axis.YTick at 0x107294910>,<matplotlib.axis.YTick at 0x10729dd10>,<matplotlib.axis.YTick at 0x1072a6390>],<a list of 6 Text yticklabel objects>)

可通過如下代碼,設置 X、Y 坐標軸和標題:

In?[2]: # 設置標題、x軸、y軸 plt.title(r'$the \ function \ figure \ of \ cos(), \ sin() \ and \ sqrt()$', fontsize=19) plt.xlabel(r'$the \ input \ value \ of \ x$', fontsize=18, labelpad=88.8) plt.ylabel(r'$y = f(x)$', fontsize=18, labelpad=12.5) NameErrorTraceback (most recent call last) <ipython-input-2-2e1dc66cb03b> in <module>() 1 # 設置標題、x軸、y軸 ----> 2 plt.title(r'$the \ function \ figure \ of \ cos(), \ sin() \ and \ sqrt()$', fontsize=19) 3 plt.xlabel(r'$the \ input \ value \ of \ x$', fontsize=18, labelpad=88.8) 4 plt.ylabel(r'$y = f(x)$', fontsize=18, labelpad=12.5)NameError: name 'plt' is not defined

3.5 設置文字描述、注解

可通過如下代碼,在數據圖中添加文字描述 text:

In?[19]: plt.text(0.8, 0.9, r'$x \in [0.0, \ 10.0]$', color='k', fontsize=15)plt.text(0.8, 0.8, r'$y \in [-1.0, \ 4.0]$', color='k', fontsize=15)Out[19]:<matplotlib.text.Text at 0x7f88cddfd950>

可通過如下代碼,在數據圖中給特殊點添加注解 annotate:

In?[?]: # 特殊點添加注解 plt.scatter([8,],[np.sqrt(8),], 50, color ='m') # 使用散點圖放大當前點 plt.annotate(r'$2\sqrt{2}$', xy=(8, np.sqrt(8)), xytext=(8.5, 2.2), fontsize=16, color='#090909', arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=0.1', color='#090909'))

3.6 設置圖例

可使用如下兩種方式,給繪圖設置圖例:

  • 1: 在 plt.plot 函數中添加 label 參數后,使用 plt.legend(loc=’up right’)
  • 2: 不使用參數 label, 直接使用如下命令:
In?[14]: plt.legend(['cos(x)', 'sin(x)', 'sqrt(x)'], loc='upper right')Out[14]:<matplotlib.legend.Legend at 0x10d7893d0>

3.7 網格線開關

可使用如下代碼,給繪圖設置網格線:

In?[?]: # 顯示網格線 plt.grid(True)

3.8 顯示與圖像保存

In?[?]: plt.show() # 顯示#savefig('../figures/plot3d_ex.png',dpi=48) # 保存,前提目錄存在

4.完整的繪制程序

In?[16]: #coding:utf-8 ? import numpy as np import matplotlib.pyplot as plt from pylab import * ? # 定義數據部分 x = np.arange(0., 10, 0.2) y1 = np.cos(x) y2 = np.sin(x) y3 = np.sqrt(x) ? # 繪制 3 條函數曲線 plt.plot(x, y1, color='blue', linewidth=1.5, linestyle='-', marker='.', label=r'$y = cos{x}$') plt.plot(x, y2, color='green', linewidth=1.5, linestyle='-', marker='*', label=r'$y = sin{x}$') plt.plot(x, y3, color='m', linewidth=1.5, linestyle='-', marker='x', label=r'$y = \sqrt{x}$') ? # 坐標軸上移 ax = plt.subplot(111) ax.spines['right'].set_color('none') # 去掉右邊的邊框線 ax.spines['top'].set_color('none') # 去掉上邊的邊框線 ? # 移動下邊邊框線,相當于移動 X 軸 ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data', 0)) ? # 移動左邊邊框線,相當于移動 y 軸 ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0)) ? # 設置 x, y 軸的取值范圍 plt.xlim(x.min()*1.1, x.max()*1.1) plt.ylim(-1.5, 4.0) ? # 設置 x, y 軸的刻度值 plt.xticks([2, 4, 6, 8, 10], [r'2', r'4', r'6', r'8', r'10']) plt.yticks([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], [r'-1.0', r'0.0', r'1.0', r'2.0', r'3.0', r'4.0']) ? # 添加文字 plt.text(0.8, 0.8, r'$x \in [0.0, \ 10.0]$', color='k', fontsize=15) plt.text(0.8, 0.9, r'$y \in [-1.0, \ 4.0]$', color='k', fontsize=15) ? # 特殊點添加注解 plt.scatter([8,],[np.sqrt(8),], 50, color ='m') # 使用散點圖放大當前點 plt.annotate(r'$2\sqrt{2}$', xy=(8, np.sqrt(8)), xytext=(8.5, 2.2), fontsize=16, color='#090909', arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=0.1', color='#090909')) ? # 設置標題、x軸、y軸 plt.title(r'$the \ function \ figure \ of \ cos(), \ sin() \ and \ sqrt()$', fontsize=19) plt.xlabel(r'$the \ input \ value \ of \ x$', fontsize=18, labelpad=88.8) plt.ylabel(r'$y = f(x)$', fontsize=18, labelpad=12.5) ? # 設置圖例及位置 plt.legend(loc='up right') # plt.legend(['cos(x)', 'sin(x)', 'sqrt(x)'], loc='up right') ? # 顯示網格線 plt.grid(True) ? # 顯示繪圖 plt.show()

常用圖形

細節看這里,看這里,看這里

  • 曲線圖:matplotlib.pyplot.plot(data)
  • 灰度圖:matplotlib.pyplot.hist(data)
  • 散點圖:matplotlib.pyplot.scatter(data)
  • 箱式圖:matplotlib.pyplot.boxplot(data)
In?[17]: x = np.arange(-5,5,0.1)y = x ** 2plt.plot(x,y)Out[17]:[<matplotlib.lines.Line2D at 0x1070d2d90>] In?[18]: x = np.random.normal(size=1000) plt.hist(x, bins=10) Out[18]: (array([ 4., 22., 77., 172., 293., 256., 123., 39., 10., 4.]),array([-3.4162938 , -2.70033058, -1.98436735, -1.26840412, -0.5524409 ,0.16352233, 0.87948555, 1.59544878, 2.31141201, 3.02737523,3.74333846]),<a list of 10 Patch objects>) In?[26]: plt.rcParams["figure.figsize"] = (8,8)x = np.random.normal(size=1000)y = np.random.normal(size=1000)plt.scatter(x,y)Out[26]:<matplotlib.collections.PathCollection at 0x7f885eef2290> In?[20]: plt.boxplot(x) Out[20]: {'boxes': [<matplotlib.lines.Line2D at 0x10e90ea50>],'caps': [<matplotlib.lines.Line2D at 0x10e91c950>,<matplotlib.lines.Line2D at 0x10e91cf90>],'fliers': [<matplotlib.lines.Line2D at 0x10e928c50>],'means': [],'medians': [<matplotlib.lines.Line2D at 0x10e928610>],'whiskers': [<matplotlib.lines.Line2D at 0x10e90ec10>,<matplotlib.lines.Line2D at 0x10e91c310>]}

箱式圖科普

  • 上邊緣(Q3+1.5IQR)、下邊緣(Q1-1.5IQR)、IQR=Q3-Q1
  • 上四分位數(Q3)、下四分位數(Q1)
  • 中位數
  • 異常值
  • 處理異常值時與3σσ標準的異同:統計邊界是否受異常值影響、容忍度的大小。

總結

以上是生活随笔為你收集整理的matplotlib实践过程总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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