无主之地2配置高吗|看真人裸体BBBBB|秋草莓丝瓜黄瓜榴莲色多多|真人強奷112分钟|精品一卡2卡3卡四卡新区|日本成人深夜苍井空|八十年代动画片

網易首頁 > 網易號 > 正文 申請入駐

人工智能通識課:Matplotlib 繪圖基礎

0
分享至

在數據分析、科學計算以及機器學習實踐中,數據往往不是先靠“計算結果”被理解,而是先靠“圖形表現”被看懂。數字本身當然重要,但當數據規模增大、變量關系變復雜時,僅僅閱讀一串數值,往往很難迅速把握整體特征。此時,圖形就成為理解數據的重要工具。

例如,一組數據如果直接寫成:

[10, 15, 20, 18, 25]

我們只能大致知道它在變化,卻不容易立刻感受到變化的趨勢、波動的位置以及增長的快慢;但如果將它繪制成折線圖,數據走勢通常會立即變得清晰得多。也正因為如此,數據可視化幾乎貫穿于數據分析的整個過程:在探索階段幫助我們觀察分布,在建模階段幫助我們檢驗關系,在結果展示階段幫助我們傳達結論。

在 Python 生態中, 是最基礎、也最重要的可視化庫之一。許多更高級的可視化工具,本質上都與它存在直接或間接的聯系。

一、Matplotlib 是什么

Matplotlib 是 Python 中用于繪制二維圖形的通用可視化庫。它支持折線圖、散點圖、柱狀圖、直方圖、餅圖等多種常見圖形,也可以進一步擴展到更復雜的可視化任務。

它之所以被廣泛使用,主要有幾個原因。

第一,它覆蓋了數據分析中最常見的繪圖需求。無論是展示趨勢、比較類別、觀察分布,還是分析變量關系,Matplotlib 都能提供基礎支持。

第二,它與 NumPy、Pandas 等科學計算庫結合緊密。很多時候,我們并不是單獨“為了畫圖而畫圖”,而是在數組計算、表格處理、統計分析之后,順勢進入可視化階段。Matplotlib 恰好位于這條工作鏈的末端,是分析結果的主要展示工具之一。

第三,它具有較強的可定制性。圖中的線條、顏色、標簽、刻度、圖例、網格、尺寸、分辨率等,通常都可以調整。這使得它既適合教學演示,也適合科研繪圖和工程輸出。

安裝:

pip install matplotlib

導入時最常見的寫法是:

import matplotlib.pyplot as plt

這里的 pyplot 是 Matplotlib 中最常用的接口模塊。它提供了一套類似 MATLAB 風格的狀態式繪圖方式,因此在入門階段非常常見。不過,Matplotlib 并不僅僅只有這一種寫法。要真正理解它,必須先弄清楚它的圖形結構。

二、Matplotlib 的圖形結構

學習 Matplotlib 時,最容易混淆的問題之一,是“圖到底是什么”。很多初學者只記住了 plt.plot()、plt.show(),卻沒有真正理解一幅圖由哪些對象構成。實際上,Matplotlib 的圖形系統是有清晰層次的。

從整體上看,可以把它理解為:

Figure → Axes → 具體圖形元素

1、Figure:整個圖形對象

Figure 表示整個圖形對象,可以把它理解為一張完整的畫布。它是所有繪圖內容的最外層容器。圖像的尺寸、分辨率、整體布局等,通常都與 Figure 有關。

2、Axes:實際繪圖的區域

Axes 表示一個具體的繪圖區,也就是帶有坐標系的區域。絕大多數繪圖操作,實際上都發生在 Axes 上。折線、散點、柱子、標題、坐標軸標簽、圖例等,都通常依附于某個 Axes。

很多初學者會把 Axes 理解為“坐標軸”,這并不準確。更合適的理解是:Axes 是一個完整的繪圖區,其中包含橫軸、縱軸以及這個區域中的各種圖形元素。

3、圖形元素:線條、文本、圖例等

在 Axes 內部,還存在許多更具體的元素,例如:

? 折線

? 散點

? 柱形

? 標題

? 坐標軸標簽

? 圖例

? 網格線

這些是圖中真正被看到的內容。從使用角度看,初學階段只需要先把握 Figure 和 Axes 的關系即可,不必過早深入到底層對象體系。

4、直觀理解

可以把 Matplotlib 的結構粗略理解為:

    └── 坐標軸

如果一張圖中包含多個子圖,那么一個 Figure 中就會包含多個 Axes。

三、最基本的繪圖流程

無論繪制什么類型的圖形,Matplotlib 的基本過程大致都可以歸納為以下幾步:

1、準備數據

2、創建圖形對象或繪圖區

3、調用繪圖函數

4、添加標題、標簽、圖例、網格等輔助信息

5、顯示圖形或保存圖像

例如,下面是一段最基礎的繪圖代碼:

plt.show()


這段代碼雖然很短,但已經包含了最核心的動作:

? x 和 y 是數據

? plt.plot(x, y) 用于繪制圖形

? plt.show() 用于顯示圖形

不過,這樣得到的圖通常還比較“原始”。在實際使用中,我們往往還需要進一步補充說明信息。例如:

plt.show()


這時圖形就更完整了,因為它不僅有數據曲線,還有標題、坐標軸標簽、圖例和網格。對于讀者來說,圖形的可讀性會明顯提高。

四、最常見的幾類基礎圖形

Matplotlib 支持的圖形類型很多,但在入門階段,應先掌握最常見、最有代表性的幾類。它們分別對應不同的數據表達任務。


1、折線圖:觀察趨勢

折線圖是最常見的基礎圖形之一,適合展示數據隨某個變量的變化趨勢。例如時間序列、訓練輪次、函數曲線等,都常常使用折線圖。

示例:

plt.show()

折線圖強調的是“連續變化”。如果我們關心的是走勢、波動、上升下降趨勢,那么它通常是首選。

2、散點圖:觀察變量關系

散點圖適合展示兩個變量之間的關系。每一個點對應一組觀測值,點的分布形態可以幫助我們初步判斷相關性、聚集趨勢或異常值。

示例:

plt.show()

如果折線圖強調“連起來看變化”,那么散點圖更強調“分布在哪里、關系怎樣”。在回歸分析、相關分析和實驗觀察中,散點圖都很常見。

3、柱狀圖:比較類別大小

柱狀圖適合比較不同類別的數據大小。例如不同班級人數、不同商品銷量、不同模型準確率等,往往都可以用柱狀圖呈現。

示例:

plt.show()

柱狀圖強調的是“類別間比較”。它不是為了展示連續變化,而是為了直觀比較不同項目之間的差異。

4、直方圖:觀察數據分布

直方圖與柱狀圖外觀相似,但含義不同。它不是用來比較離散類別,而是用來統計數據在各個區間中的分布情況。

示例:

plt.show()

直方圖常用于回答這些問題:

? 數據主要集中在哪些范圍

? 數據分布是否對稱

? 是否接近正態分布

? 是否存在明顯偏態或異常集中現象

因此,在統計分析和機器學習的數據探索階段,直方圖尤其常見。

5、餅圖:展示整體中的占比

餅圖適合展示各部分在整體中的比例關系。

示例:

plt.show()

餅圖雖然直觀,卻并不總是最優選擇。當類別較多或各部分差異不明顯時,餅圖的可讀性會明顯下降,這時柱狀圖往往更清晰。因此,餅圖適合在類別不多、比例關系明確時使用。

五、狀態式繪圖與面向對象繪圖

所謂“狀態式繪圖”,可以理解為:當前有一個默認的圖形環境,pyplot 會把你的操作自動作用到當前圖或當前繪圖區上。這種方式依賴的是 pyplot 提供的狀態式接口,優點是上手快,代碼短,適合簡單場景。

比如:

plt.show()

但當圖形變復雜時,它也容易讓人分不清“當前到底在操作哪一個圖、哪一個子圖”。

因此,Matplotlib 官方更推薦另一種方式:面向對象繪圖。

1、面向對象寫法的基本形式

示例:

plt.show()

? fig 表示整個圖形對象

? ax 表示具體繪圖區

也就是說,圖是先被創建出來的,然后再明確地在某個 ax 上繪制內容。

2、為什么更推薦面向對象方式

面向對象寫法的最大優點,是結構清楚。尤其當一張圖中包含多個子圖時,這種優勢會更加明顯。

示例:

plt.show()


這里的兩個子圖各自對應一個 Axes 對象。因為每個圖都明確屬于自己的 ax,所以代碼更容易維護,也更不容易混亂。

3、如何理解兩種方式的關系

初學時,可以先用狀態式寫法快速熟悉繪圖流程;但隨著圖形復雜度提高,應逐步過渡到面向對象寫法。

從本質上說:

? plt.plot() 是在“當前 Axes 上畫圖”

? ax.plot() 是在“指定 Axes 上畫圖”

前者強調方便,后者強調清晰。

六、圖形修飾:讓圖真正可讀

一張圖并不是畫出來就結束了。真正有用的圖,通常還需要經過修飾,才能成為清晰的信息表達工具。

最常見的修飾包括以下幾類。

1、標題

標題告訴讀者這張圖在展示什么內容。沒有標題的圖,往往需要讀者自行猜測含義。

plt.title("Example Function")

或在面向對象寫法中:

ax.set_title("Example Function")

2、坐標軸標簽

橫軸和縱軸標簽用于說明變量含義。如果坐標軸沒有標簽,讀者常常不知道橫縱軸分別代表什么。

plt.ylabel("y")

對應的面向對象寫法為:

ax.set_ylabel("y")

3、圖例

當圖中有多條曲線或多個圖形對象時,圖例非常重要。它用于說明不同顏色、不同線條分別對應什么含義。

plt.legend()

4、網格

網格不是必須的,但在很多圖中,它可以幫助讀者更容易估計位置和數值范圍,特別是在教學、分析和報告場景中很有幫助。

plt.grid(True)

5、子圖間距調整

當一個 Figure 中有多個子圖時,標題、標簽和刻度文字可能互相擠壓。此時通常需要調整布局。

plt.tight_layout()

它的作用是自動優化子圖之間的間距,減少重疊問題。

七、圖形顯示、保存與輸出后端

繪圖完成后,通常還需要處理兩個問題:一是怎樣顯示圖形,二是怎樣保存圖像。

1、顯示圖形

plt.show()

在普通 Python 腳本中,通常需要顯式調用 show(),圖形窗口才會彈出。

在某些交互式環境中,圖形可能會自動顯示,但理解 show() 的作用仍然很重要。

2、保存圖像

plt.savefig("plot.png", dpi=300, bbox_inches="tight")

這里:

? "plot.png" 是輸出文件名

? dpi=300 表示較高分辨率

? bbox_inches="tight" 表示盡量裁剪多余空白

一般來說,常見輸出格式包括 PNG、PDF、SVG 等。

其中,PNG 適合普通圖像輸出,PDF 和 SVG 更適合高質量文檔或矢量圖場景。

在實際使用中,通常建議先保存,再顯示。因為在某些環境中,如果先調用 show(),再調用 savefig(),可能會得到空白圖像。

示例:

plt.show()

3、輸出后端

在 Matplotlib 中,圖形之所以能夠顯示在屏幕上,或保存為 PNG、PDF、SVG 等文件,背后都依賴于后端(backend)。可以把后端簡單理解為:圖形最終通過什么方式被顯示或輸出。

輸出后端常分為兩種:

? 交互式后端主要用于在窗口、瀏覽器或 Notebook 中顯示圖形

? 非交互式后端主要用于生成圖片文件或文檔圖形,而不強調界面交互

大多數情況下,Matplotlib 會自動選擇合適的后端,因此不需要手動設置。

如果想查看當前 Matplotlib 使用的后端,可以寫:

print(matplotlib.get_backend())

如果確實需要手動設置后端,可以寫:

matplotlib.use("Agg")

"Agg" 表示基于 Anti-Grain Geometry 渲染引擎的非交互式后端,主要用于生成高質量的位圖圖像文件,如 PNG。

八、中文顯示與簡單全局配置

在中文環境下,Matplotlib 的一個常見問題是:圖中中文可能無法正常顯示,或者負號顯示異常。這并不是繪圖函數本身的問題,而通常與默認字體配置有關。

一種常見處理方式是使用 rcParams 設置全局參數:

plt.rcParams["axes.unicode_minus"] = False

這里:

? font.sans-serif 用于指定無襯線字體列表

? axes.unicode_minus = False 用于避免負號顯示異常

這類設置屬于全局默認配置,會影響后續創建的圖形。

除了字體外,還可以通過 rcParams 調整默認圖像尺寸、分辨率、線寬等內容。例如:

plt.rcParams["figure.dpi"] = 120

一般從說,不必一次記住太多全局參數。只需知道:Matplotlib 不僅可以“在單張圖上修改”,也可以通過全局配置改變后續圖形的默認行為。

九、綜合示例

下面給出一個簡單的綜合示例,將圖形創建、繪圖、修飾與輸出串聯起來。

小結

Matplotlib 是 Python 中最基礎的數據可視化庫。學習它的關鍵,不只是會調用 plot()、scatter()、bar() 這樣的函數,更重要的是理解 Figure 與 Axes 的結構關系,以及“準備數據—創建圖形—繪制內容—修飾圖形—顯示或保存”的基本流程。當這條主線建立起來之后,后續無論是學習更復雜的繪圖函數,還是處理多子圖、樣式配置與圖像輸出,都會更自然、更穩固。

點贊有美意,贊賞是鼓勵

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
財務造假!10家A股公司退市,超25萬股東踩雷

財務造假!10家A股公司退市,超25萬股東踩雷

21世紀經濟報道
2026-06-12 18:59:56
普京再次回應戰爭起源:不是俄開戰,是基輔先向頓巴斯開火

普京再次回應戰爭起源:不是俄開戰,是基輔先向頓巴斯開火

桂系007
2026-06-12 23:57:08
美加墨世界杯第二場比賽就現空座,票價爭議浮出水面

美加墨世界杯第二場比賽就現空座,票價爭議浮出水面

澎湃新聞
2026-06-12 17:40:29
剛剛,人類歷史上首位萬億美元富豪誕生!

剛剛,人類歷史上首位萬億美元富豪誕生!

每日經濟新聞
2026-06-12 22:32:06
英媒一語驚人:中美貿易戰中,美國唯獨算錯的是中國的底牌!

英媒一語驚人:中美貿易戰中,美國唯獨算錯的是中國的底牌!

流史歲月
2026-06-12 18:30:08
現在的年輕人不敢開房了

現在的年輕人不敢開房了

微微熱評
2026-06-13 00:53:53
看完世界杯第2場,球迷看清了3個不爭事實,韓國最擅長踢歐洲球隊

看完世界杯第2場,球迷看清了3個不爭事實,韓國最擅長踢歐洲球隊

侃球熊弟
2026-06-12 11:56:01
CCTV5直播!世界杯“重頭戲”,超21億歐元對決,姆巴佩PK哈蘭德

CCTV5直播!世界杯“重頭戲”,超21億歐元對決,姆巴佩PK哈蘭德

麥子的籃球故事
2026-06-12 17:40:17
阿里高層這次真的生氣了

阿里高層這次真的生氣了

一見財經
2026-06-12 11:11:21
國安部披露:在我國某海域發現有較大型活體海洋動物被掛上傳感器,竊取海洋敏感數據

國安部披露:在我國某海域發現有較大型活體海洋動物被掛上傳感器,竊取海洋敏感數據

每日經濟新聞
2026-06-12 13:16:05
中國斷供稀土5個多月,日本工廠無一停產,是真擺脫了還是在硬撐

中國斷供稀土5個多月,日本工廠無一停產,是真擺脫了還是在硬撐

次元君情感
2026-06-01 14:27:53
63歲阿湯哥被曝“越老越瘋”,同行都看不下去了

63歲阿湯哥被曝“越老越瘋”,同行都看不下去了

生活觀察員啊
2026-06-11 01:22:03
打臉CBA,懷特塞德高調加入其他聯賽沒有傷病,上海隊陷入爭議

打臉CBA,懷特塞德高調加入其他聯賽沒有傷病,上海隊陷入爭議

宗介說體育
2026-06-12 16:35:22
美軍開始空襲伊朗

美軍開始空襲伊朗

財聯社
2026-06-11 05:42:11
劉宇寧發文回應戀情:清醒坦蕩的態度,才是明星該有的模樣

劉宇寧發文回應戀情:清醒坦蕩的態度,才是明星該有的模樣

陳意小可愛
2026-06-13 00:50:31
“張雪機車”獲得WSBK艾米利亞-羅馬涅站桿位賽第三名

“張雪機車”獲得WSBK艾米利亞-羅馬涅站桿位賽第三名

極目新聞
2026-06-12 23:00:07
中央開始嚴查,多地機關事業單位大整頓啟動,這幾類人受影響最大

中央開始嚴查,多地機關事業單位大整頓啟動,這幾類人受影響最大

職場資深秘書
2026-06-12 14:47:02
老人入住精神病院7年后查出梅毒;哈爾濱精神專科白漁泡醫院稱系舊疾,家屬出示入院前梅毒陰性檢測報告反駁

老人入住精神病院7年后查出梅毒;哈爾濱精神專科白漁泡醫院稱系舊疾,家屬出示入院前梅毒陰性檢測報告反駁

大風新聞
2026-06-12 12:12:20
內塔尼亞胡:特朗普不打伊朗了,沒提前告訴我

內塔尼亞胡:特朗普不打伊朗了,沒提前告訴我

政知新媒體
2026-06-12 19:06:11
謝娜再次翻車,這一次,她踢到鐵板了

謝娜再次翻車,這一次,她踢到鐵板了

桌子的生活觀
2026-06-12 11:58:27
2026-06-13 02:35:00
MediaTea
MediaTea
專業的數字媒體、新媒體技術
1888文章數 80關注度
往期回顧 全部

科技要聞

剛剛,人類歷史上首位萬億美元富豪誕生!

頭條要聞

美加墨世界杯第二場比賽就現空座 英媒:尷尬

頭條要聞

美加墨世界杯第二場比賽就現空座 英媒:尷尬

體育要聞

歐洲恐韓?肉德維德?

娛樂要聞

一天4個瓜,肖戰熱巴最意外

財經要聞

萬億美元順差背后,透露這些信號

汽車要聞

標配激光雷達/雙動力可選 昊鉑S600限時售17.99萬起

態度原創

房產
手機
旅游
藝術
軍事航空

房產要聞

海南最賺錢行業曝光!最快4年半,海口全款買三房!

手機要聞

vivo X Fold6再預熱:天璣9500超能版+OriginOS 6 Fold

旅游要聞

印度有錢人真多酷暑辦理旅游簽證!不是有錢任性,是熱到活不下去

藝術要聞

砸了640億,再賠160億!沙特“The Line”項目徹底涼了?

軍事要聞

伊朗媒體:已故最高領袖葬禮推遲舉行

無障礙瀏覽 進入關懷版