Matplotlib(一)- 數據可視化與Matplotlib

文章目錄

  • 一、數據可視化
    • 1. 數據可視化的概念
    • 2. 數據可視化流程
    • 3. 數據可視化目的
    • 4. 常見的可視化圖表
      • 4.1 折線圖
      • 4.2 柱形圖
      • 4.3 條形圖
      • 4.4 堆積圖
        • 4.4.1 堆積面積圖
        • 4.4.2 堆積柱形圖和堆積條形圖
      • 4.5 直方圖
      • 4.6 箱形圖
      • 4.7 餅圖
      • 4.8 散點圖
      • 4.9 氣泡圖
      • 4.10 誤差棒圖
      • 4.11 雷達圖
  • 二、Python中常見的數據可視化庫
    • 1. Matplotlib
    • 2. Seaborn
    • 3. pyecharts
    • 4. Bokeh
    • 5. Plotly
    • 6. ggplot
  • 三、Matplotlib
    • 1. Matplotlib簡介
    • 2. Matplotlib的API
      • 2.1 Pyplot API
      • 2.2 Object-Oriented API
    • 3. 安裝Matplotlib
    • 4. Matplotlib的核心類
      • 4.1 Figure 類
      • 4.2 Axes 類
      • 4.3 Axis 類
      • 4.4 Artist 類
      • 4.5 pyplot 模塊


一、數據可視化

1. 數據可視化的概念

數據可視化是將復雜數據轉化為圖形、圖表等視覺形式,借助人類對視覺信息的敏感度,快速呈現數據規律、趨勢和關聯,幫助人們直觀理解數據、發現隱藏信息并高效溝通。

2. 數據可視化流程

Created with Rapha?l 2.3.0開始讀取目標數據選擇圖類型繪制圖形保存可視化結果結束

3. 數據可視化目的

數據可視化的目的是通過直觀的視覺形式,簡化復雜數據,清晰呈現其規律、趨勢和關聯,幫助人們快速理解信息、發現問題、高效溝通,為決策或信息傳遞提供支持。

4. 常見的可視化圖表

4.1 折線圖

折線圖主要用于展示數據隨時間或連續變量的變化趨勢,通過連接數據點形成的線條,直觀呈現數值的增減規律、波動情況及變化速率,幫助快速發現數據的發展走向和周期性特征,便于分析趨勢背后的關聯與規律。

4.2 柱形圖

柱形圖通過高度不同的柱體直觀對比不同類別或組別數據的數值大小,清晰呈現各類別間的差異、高低排序及數據分布,便于快速判斷類別間的數量關系和突出關鍵數據。

4.3 條形圖

條形圖通過長度不同的橫向條形直觀對比多個類別或組別數據的數值大小,尤其適用于類別名稱較長或類別數量較多的場景,能清晰呈現各類別間的數量差異、排序關系及分布特征,方便快速識別數據高低和類別間的比較結果。

4.4 堆積圖

4.4.1 堆積面積圖

堆積面積圖通過疊加的面積塊展示多個數據系列隨時間或連續變量的變化趨勢,既能呈現每個系列的數值增減,又能直觀反映整體總量的變化及各部分占比關系,便于同時分析局部趨勢與整體構成。

4.4.2 堆積柱形圖和堆積條形圖

堆積柱形圖(縱向)和堆積條形圖(橫向)通過分層柱體 / 條形的總長度(高度)展示類別總量,同時以不同分層直觀呈現各子類別占比,既便于對比不同類別間的總量差異,又能清晰體現單個類別內部的構成關系。

4.5 直方圖

直方圖通過將連續數據劃分為若干區間( bins ),用矩形的高度表示每個區間內數據的頻數或頻率,直觀呈現數據的分布特征(如集中趨勢、離散程度、是否對稱等),幫助快速判斷數據的分布形態和異常值情況。

4.6 箱形圖

箱形圖通過展示數據的四分位數(中位數、上下四分位數)、最大值、最小值及異常值,直觀呈現數據的分布特征(集中趨勢、離散程度、對稱性)和潛在異常情況,便于快速對比多組數據的分布差異與整體統計特征。

4.7 餅圖

餅圖通過將圓形劃分為不同比例的扇形,直觀展示單個數據總體中各組成部分的占比關系,清晰呈現各部分在整體中的相對大小和構成比例,便于快速理解類別間的份額差異及整體結構特征(適用于類別較少的場景)。

4.8 散點圖

散點圖通過在直角坐標系中繪制多組數據點(每個點對應兩個變量的數值),直觀呈現變量間的關聯關系(如正相關、負相關或無相關),同時能反映數據的分布密集程度和異常值,幫助快速識別變量間的潛在規律或趨勢。

4.9 氣泡圖

氣泡圖在散點圖基礎上,通過氣泡的大小增加第三個變量的信息維度,既呈現兩個變量間的關聯關系,又能直觀展示每個數據點對應的第三個變量的數值規模,從而同時反映三個變量間的相互關系及數據的多重特征。

4.10 誤差棒圖

誤差棒圖通過在數據點或統計量(如均值)旁添加線段(誤差棒),直觀展示數據的變異范圍(如標準差、標準誤、置信區間等),既呈現核心數據的集中趨勢,又能反映其不確定性或離散程度,幫助更全面地理解數據的可靠性與波動特征。

4.11 雷達圖

雷達圖以從同一點出發的多條坐標軸(代表不同指標)為框架,將各指標數據連接成多邊形,直觀展示單個樣本在多維度指標上的表現,以及多個樣本在各維度的差異與整體特征,便于快速對比多維度數據的均衡性和綜合水平。


二、Python中常見的數據可視化庫

1. Matplotlib

Matplotlib 是 Python 中最基礎且應用廣泛的數據可視化庫,提供了高度自定義的繪圖接口,支持繪制折線圖、柱狀圖、餅圖等多種基礎圖表,可靈活控制圖表的樣式細節,適用于從簡單數據展示到復雜科學繪圖的各類場景。

2. Seaborn

Seaborn 基于 Matplotlib 開發,簡化了繪圖流程,內置多種美觀的默認樣式,專注于統計數據可視化,能輕松繪制熱力圖、箱線圖、小提琴圖等統計圖表,便于快速探索數據分布和變量關系。

3. pyecharts

pyecharts 是基于 ECharts 的 Python 可視化庫,擅長生成交互式網頁圖表,支持折線圖、地圖、詞云等多種動態圖表,可通過簡單代碼實現圖表的交互功能(如縮放、 tooltip 提示),適合用于 Web 數據可視化展示。

4. Bokeh

Bokeh 是專注于交互式可視化的 Python 庫,能生成可在瀏覽器中展示的動態圖表,支持大型數據集的高效渲染,可通過回調函數實現復雜交互,常用于構建交互式數據儀表盤。

5. Plotly

Plotly 是一個功能強大的交互式可視化庫,支持多種圖表類型(包括 3D 圖表),提供直觀的交互體驗(如懸停查看詳情、縮放旋轉),既適用于快速繪制基礎圖表,也能構建復雜的交互式可視化應用,且支持 Python、R 等多語言。

6. ggplot

ggplot 基于 R 語言的 ggplot2 理念開發,采用 “圖層疊加” 的語法邏輯,通過簡潔代碼即可生成美觀且規范的統計圖表,注重數據與圖形元素的映射關系,適合遵循 “ Grammar of Graphics ” 思想的用戶快速實現可視化。


三、Matplotlib

1. Matplotlib簡介

Matplotlib 是 Python 中最經典、應用最廣泛的數據可視化庫,誕生于 2003 年,最初旨在模仿 Matlab 的繪圖風格,為 Python 提供類似的可視化能力。它支持從簡單的折線圖、柱狀圖到復雜的熱圖、三維圖等幾乎所有基礎圖表類型,且允許開發者通過代碼精細控制圖表的每一個細節(如坐標軸刻度、顏色、字體、圖例等),靈活性極高。無論是快速繪制草圖、生成 publication 級別的科研圖表,還是嵌入 GUI 應用程序,Matplotlib 都能勝任,是 Python 可視化的基礎工具,也是許多其他可視化庫(如 Seaborn)的底層依賴。

2. Matplotlib的API

Matplotlib 提供兩種主要的編程接口,適用于不同場景和使用習慣:

2.1 Pyplot API

Pyplot API 是 Matplotlib 的交互式接口,通過matplotlib.pyplot模塊提供一系列類似 Matlab 的函數(如plot()、bar()、show()),無需顯式創建圖形對象,直接調用函數即可逐行繪制圖表。它適合快速生成簡單圖表或進行交互式探索,代碼簡潔直觀,例如用plt.plot(x, y)可直接繪制折線圖,plt.title()添加標題。但缺點是當圖表復雜(如多子圖、自定義樣式較多)時,容易出現狀態管理混亂。

2.2 Object-Oriented API

面向對象 API(OO API)通過顯式創建圖形(Figure)和子圖(Axes)對象,調用對象的方法(如ax.plot()、ax.set_title())進行繪圖,更符合 Python 的面向對象編程思想。它將圖表的各個元素(圖形、子圖、坐標軸等)視為獨立對象,便于精細控制復雜圖表的結構(如多子圖布局、共享坐標軸、自定義圖例位置等),適合開發可復用的可視化代碼或繪制專業級圖表。例如先通過fig, ax = plt.subplots()創建圖形和子圖對象,再用ax.plot(x, y)繪圖,邏輯更清晰,是處理復雜場景的推薦方式。

3. 安裝Matplotlib

在開始使用Matplotlib之前,需要先安裝它,通過以下命令安裝:

pip install matplotlib -i https://mirrors.aliyun.com/pypi/simple/

4. Matplotlib的核心類

4.1 Figure 類

Figure類是Matplotlib中所有繪圖元素的頂層容器,可理解為“畫布”。一個Figure對象代表一張完整的圖像,包含所有子圖(Axes)、標題、圖例、顏色條等元素。通過plt.figure()Figure()可創建Figure對象,其屬性(如尺寸figsize、分辨率dpi、背景色facecolor)決定了圖像的整體框架。例如,一張圖中可能有1個或多個子圖,這些子圖都嵌套在同一個Figure對象中。

plt.figure()方法如下所示:

def figure(num=None,  # autoincrement if None, else integer from 1-Nfigsize=None,  # defaults to rc figure.figsizedpi=None,  # defaults to rc figure.dpifacecolor=None,  # defaults to rc figure.facecoloredgecolor=None,  # defaults to rc figure.edgecolorframeon=True,FigureClass=Figure,clear=False,**kwargs):

Figure 類構造函數中一些常用的參數:

參數名描述默認值示例
num指定圖形的編號或名稱,用于復用圖形Noneplt.figure(num=1)
plt.figure(num='plot1')
figsize指定 Figure 的尺寸大小(單位為英寸),格式為 (width, height)Nonefig = plt.figure(figsize=(8, 6))
dpi設置圖形的分辨率(每英寸點數)。None(默認100)fig = plt.figure(dpi=150)
facecolor設置 Figure 背景顏色。'white'fig = plt.figure(facecolor='lightgray')
edgecolor設置 Figure 邊框的顏色。'white'fig = plt.figure(edgecolor='black')
linewidth控制 Figure 邊框線寬。0.0fig = plt.figure(linewidth=2.0)
frameon是否顯示 Figure 的邊框。Truefig = plt.figure(frameon=False)
subplotpars可選的 SubplotParams 對象,控制子圖之間的間距和邊距等。Nonefrom matplotlib import rc<br>sp = rc.subplotparams(left=0.1)<br>fig = plt.figure(subplotpars=sp)
tight_layout布爾值或字典,是否自動調整子圖布局以避免重疊。Falsefig = plt.figure(tight_layout=True)
constrained_layout布爾值,是否啟用更智能的布局調整系統,通常比 tight_layout 更強大。Falsefig = plt.figure(constrained_layout=True)
layout控制整體布局方式,可選值為 'tight''constrained',是對 tight_layoutconstrained_layout 的簡化接口。Nonelayout='tight'
layout='constrained'
FigureClass自定義一個繼承自 Figure 的類,用于創建圖形對象。Figure 類本身fig = plt.figure(FigureClass=MyFigure)
clear如果為 True,則在復用已有 Figure 時清除其內容;否則保留舊內容。Falsefig = plt.figure(clear=True)

4.2 Axes 類

Axes類代表Figure中的“子圖”,是實際繪制數據的區域,包含坐標軸(Axis)、標題、圖例等元素。每個Axes對象對應一個獨立的繪圖區域(如折線圖、柱狀圖所在的區域),一張Figure中可包含多個Axes(通過plt.subplots(nrows, ncols)創建網格狀子圖)。繪圖操作(如ax.plot()ax.bar())主要通過Axes對象的方法實現,同時可通過ax.set_xlabel()ax.set_title()等方法設置子圖的細節。

Axes 類常用參數說明表:

參數名描述默認值示例
fig所屬的 Figure 對象。Axes(fig=fig)
rect定義坐標軸的位置和大小,格式為 [left, bottom, width, height](歸一化坐標)rect=[0.1, 0.1, 0.8, 0.8]
facecolor坐標軸背景顏色。'white'facecolor='lightgray'
frame_on是否繪制坐標軸的邊框(spines)。Trueframe_on=False
sharex共享 x 軸的其他 Axes 對象,用于同步縮放。Nonesharex=ax1
sharey共享 y 軸的其他 Axes 對象。Nonesharey=ax1
labelAxes 的標簽,可用于 figure.axes 字典查找。''label='main_plot'
xscale設置 x 軸的刻度類型(如 ‘log’, ‘linear’ 等)。'linear'xscale='log'
yscale設置 y 軸的刻度類型。'linear'yscale='log'
xlim設置 x 軸范圍,格式為 (min, max)自動根據數據xlim=(0, 10)
ylim設置 y 軸范圍,格式為 (min, max)自動根據數據ylim=(0, 5)
xticks自定義 x 軸刻度位置。自動xticks=[0, 2, 4, 6]
yticks自定義 y 軸刻度位置。自動yticks=[0, 1, 2]
title設置 Axes 的標題。title='My Plot Title'
xlabel設置 x 軸標簽。xlabel='X Data'
ylabel設置 y 軸標簽。ylabel='Y Data'

4.3 Axis 類

Axis類代表Axes中的坐標軸(x軸、y軸,3D圖中還包括z軸),負責控制坐標軸的刻度、標簽、范圍等。它包含刻度線(ticks)、刻度標簽(tick labels)、軸標簽(label)等元素,可通過ax.xaxisax.yaxis獲取對應Axis對象,進而自定義刻度間隔(set_ticks())、刻度標簽旋轉(set_rotation())、軸范圍(set_lim())等,例如調整x軸刻度為每月1號或設置y軸范圍為0到100。

4.4 Artist 類

Artist類是Matplotlib中所有可繪制元素的基類,涵蓋了Figure、Axes、Axis等容器類,以及線條(Line2D)、文本(Text)、矩形(Rectangle)、圖例(Legend)等具體圖形元素。所有Artist對象都擁有樣式屬性(如顏色color、線寬linewidth、透明度alpha),并通過draw()方法被渲染到畫布上。Matplotlib的繪圖過程本質上是創建和配置各種Artist對象,并將它們添加到Figure或Axes中的過程。

4.5 pyplot 模塊

pyplot模塊(matplotlib.pyplot)并非類,而是一個封裝了底層類的函數接口集合,提供了類似Matlab的命令式繪圖方式。它通過維護一個“當前Figure”和“當前Axes”的狀態,允許用戶用函數(如plt.plot()plt.xlabel())直接操作當前繪圖區域,無需顯式創建對象。例如plt.plot(x, y)會自動將線條添加到當前Axes中,plt.show()則顯示當前Figure。pyplot簡化了簡單繪圖的流程,但其狀態管理依賴全局變量,復雜場景下推薦結合面向對象API使用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88842.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88842.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88842.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

傳輸層協議UDP原理

端口號回顧端口號的作用類似pid&#xff0c;用來標識進程的唯一性。只是為了與系統解耦&#xff0c;所以有了端口號。通過ip來確定唯一主機&#xff0c;再通過端口號找到指定的進程。就可以讓全網內唯一的兩個進程通信了。所以一個完整的報文至少要攜帶ip和端口號&#xff0c;i…

【牛客刷題】小紅的數字刪除

文章目錄 一、題目介紹1.1 題目描述1.2 輸入描述:1.3 輸出描述:1.4 示例11.5 示例2二、解題思路2.1 核心觀察2.2 關鍵問題處理三、算法實現四、算法分析4.1 算法流程圖4.2 為什么這么設計算法?4.3 算法復雜度五、模擬演練數據示例1: "103252"示例2: "333&quo…

《大數據技術原理與應用》實驗報告三 熟悉HBase常用操作

目 錄 一、實驗目的 二、實驗環境 三、實驗內容與完成情況 3.1 用Hadoop提供的HBase Shell命令完成以下任務 3.2 現有以下關系型數據庫中的表和數據&#xff0c;要求將其轉換為適合于HBase存儲的表并插入數據&#xff1a; 四、問題和解決方法 五、心得體會 一、實驗目的…

微服務初步入門

服務拆分原則 單一職責原則 單一職責原則原本是面向對象設計的一個基本原則&#xff0c;是指一個類應該專注于單一的功能&#xff0c;不要存在多于一個導致類變更的原因 在微服務架構中&#xff0c;是指一個微服務只負責一個功能或者業務領域&#xff0c;每個服務應該由清晰的定…

Liunx操作系統筆記5

用戶管理命令&#xff1a; useradd命令&#xff1a; useradd命令的功能是創建并設置用戶信息。使用useradd命令可以自動完成用戶信息、基本組、家目錄等的創建工作&#xff0c;并在創建過程中對用戶初始信息進行定制。語法格式:useradd 參數 用戶名常用參數: -M 不建立用…

spring-ai-alibaba 接入Tushare查詢股票行情

最近spring-ai-alibaba主干分支新增了對Tushare的支持&#xff0c;一起來看看如何使用簡單樣例老樣子&#xff0c;分三步進行&#xff1a;第一步&#xff1a;添加依賴<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-aliba…

Java使用Langchai4j接入AI大模型的簡單使用(一)

一、LangChain4j 簡介 LangChain4j 是 Java 生態中的 LangChain 實現&#xff0c;是一個用于構建大語言模型(LLM)應用程序的框架。它提供了與各種LLM服務集成的能力&#xff0c;并簡化了構建復雜AI應用的過程。 LangChain4j官方文檔&#xff1a;Integrations | LangChain4j …

Linux —— A / 基礎指令

建議學習路徑&#xff1a;Linux系統與系統編程 ? Linux網絡和網絡編程 ? MySQL一、初識shell命令 1.1、關于 Linux 桌面很多同學的 Linux 啟動進?圖形化的桌?. 這個東西?家以后就可以忘記了。以后的工作中沒有機會使用圖形界面。思考: 為什么不使用圖形界面? 1.2、下…

[論文閱讀] 人工智能 + 軟件工程 | 用大語言模型+排名機制,讓代碼評論自動更新更靠譜

LLMCup&#xff1a;用大語言模型排名機制&#xff0c;讓代碼評論自動更新更靠譜 LLMCup: Ranking-Enhanced Comment Updating with LLMsarXiv:2507.08671 LLMCup: Ranking-Enhanced Comment Updating with LLMs Hua Ge, Juan Zhai, Minxue Pan, Fusen He, Ziyue Tan Comments: …

悲觀鎖 樂觀鎖

悲觀鎖 樂觀鎖 在沒有加鎖的秒殺場景下 每秒打進來的請求是巨大的 高并發場景下 我們發現不僅異常率高的可怕 庫存竟然還變成了負數 這產生的結果肯定是很大損失的 那為什么會出現超賣問題呢 我們假設有下面兩個線程線程1查詢庫存&#xff0c;發現庫存充足&#xff0c;創建訂單…

如何使用Cisco DevNet提供的免費ACI學習實驗室(Learning Labs)?(Grok3 回答)

Cisco DevNet 提供的免費 ACI&#xff08;Application Centric Infrastructure&#xff09;學習實驗室&#xff08;Learning Labs&#xff09;是幫助用戶學習和實踐 Cisco ACI 技術&#xff08;包括 APIC 控制器&#xff09;的優秀資源&#xff0c;適合網絡工程師、開發者和準備…

Combine的介紹與使用

目錄一、Combine 框架介紹二、核心概念三、基礎使用示例3.1、創建 Publisher & 訂閱3.2、操作符鏈式調用3.3、Subject 使用&#xff08;手動發送值&#xff09;3.4、網絡請求處理3.5、組合多個 Publisher3.6、錯誤處理四、核心操作符速查表 Operator五、UIKit 綁定示例六、…

【Java筆記】七大排序

目錄1. 直接插入排序2. 希爾排序3. 選擇排序4. 堆排序(重要)5. 冒泡排序6. 快速排序&#xff08;重要&#xff09;6.1 Hoare 法6.1.1 Hoare 法優化6.2 挖坑法&#xff08;重點&#xff09;6.3 快速排序的非遞歸寫法7. 歸并排序海量數據的排序問題8. 總結1. 直接插入排序 時間復…

H.264編解碼(NAL)

在我們的日常生活中&#xff0c;比如有緩存電影或者是發送視頻的需求。如果沒有視頻壓縮&#xff0c;一部手機只能存幾分鐘視頻&#xff0c;1TB 硬盤也裝不下幾部電影&#xff0c;用 4G 網絡發一段 1 分鐘視頻&#xff0c;可能需要幾十分鐘&#xff08;甚至傳不完&#xff09;&…

新手向:Python自動化辦公批量重命名與整理文件系統

本文將詳細介紹如何使用Python實現一個強大的文件批量重命名與整理工具&#xff0c;幫助開發者自動化這一繁瑣過程。本教程面向Python初學者&#xff0c;通過一個完整的項目案例&#xff0c;講解文件系統操作的核心技術。我們將構建的工具將具備以下功能&#xff1a;基于正則表…

C++ 左值右值、左值引用右值引用、integral_constant、integral_constant的元模板使用案例

C 左值右值、左值引用右值引用、integral_constant、integral_constant的元模板使用案例一、左值右值1.左值2.右值二、左值引用右值引用1.左值引用2.右值引用總結三、integral_constant四、integral_constant的元模板使用案例1.求最大整數2.內存對齊alignof關鍵字元模板計算內存…

c++算法一

1.雙指針總結&#xff1a;1.復寫0這道題&#xff0c;告訴我們要正難其反&#xff0c;我們從后向前進行重寫&#xff0c;刪除某些數字的時候&#xff0c;我們可以從前向后遍歷&#xff0c;但是增加一些數字的時候會對后面的數據進行覆蓋&#xff0c;所以要從后向前進行2.快樂數涉…

LeetCode-283. 移動零(Java)

283. 移動零 給定一個數組 nums&#xff0c;編寫一個函數將所有 0 移動到數組的末尾&#xff0c;同時保持非零元素的相對順序。 請注意 &#xff0c;必須在不復制數組的情況下原地對數組進行操作。 示例 1: 輸入: nums [0,1,0,3,12] 輸出: [1,3,12,0,0] 示例 2: 輸入: n…

【數據庫】慢SQL優化 - MYSQL

一、數據庫故障的關鍵點 引起數據庫故障的因素有操作系統層面、存儲層面&#xff0c;還有斷電斷網的基礎環境層面&#xff08;以下稱為外部因素&#xff09;&#xff0c;以及應用程序操作數據庫和人為操作數據庫這兩個層面&#xff08;以下稱內部因素&#xff09;。這些故障中外…

桶排序算法深度剖析

&#x1f50d; 桶排序算法深度剖析 &#x1f3af; 核心原理圖解?? 完整算法流程 #mermaid-svg-LyB6SpaZ132X4Wtn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LyB6SpaZ132X4Wtn .error-icon{fill:#552222;}#mer…