文章目錄
- 一、數據可視化
- 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. 數據可視化流程
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 | 指定圖形的編號或名稱,用于復用圖形 | None | plt.figure(num=1) plt.figure(num='plot1') |
figsize | 指定 Figure 的尺寸大小(單位為英寸),格式為 (width, height) 。 | None | fig = 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.0 | fig = plt.figure(linewidth=2.0) |
frameon | 是否顯示 Figure 的邊框。 | True | fig = plt.figure(frameon=False) |
subplotpars | 可選的 SubplotParams 對象,控制子圖之間的間距和邊距等。 | None | from matplotlib import rc<br>sp = rc.subplotparams(left=0.1)<br>fig = plt.figure(subplotpars=sp) |
tight_layout | 布爾值或字典,是否自動調整子圖布局以避免重疊。 | False | fig = plt.figure(tight_layout=True) |
constrained_layout | 布爾值,是否啟用更智能的布局調整系統,通常比 tight_layout 更強大。 | False | fig = plt.figure(constrained_layout=True) |
layout | 控制整體布局方式,可選值為 'tight' 或 'constrained' ,是對 tight_layout 和 constrained_layout 的簡化接口。 | None | layout='tight' layout='constrained' |
FigureClass | 自定義一個繼承自 Figure 的類,用于創建圖形對象。 | Figure 類本身 | fig = plt.figure(FigureClass=MyFigure) |
clear | 如果為 True ,則在復用已有 Figure 時清除其內容;否則保留舊內容。 | False | fig = 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)。 | True | frame_on=False |
sharex | 共享 x 軸的其他 Axes 對象,用于同步縮放。 | None | sharex=ax1 |
sharey | 共享 y 軸的其他 Axes 對象。 | None | sharey=ax1 |
label | Axes 的標簽,可用于 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.xaxis
或ax.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使用。