Matplotlib詳細教程(基礎介紹,參數調整,繪圖教程)

目錄

一、初識Matploblib

1.1 安裝 Matplotlib

1.2、Matplotlib 的兩種接口風格

1.3、Figure 和 Axes 的深度理解

1.4 設置畫布大小

1.5 設置網格線

1.6?設置坐標軸

1.7 設置刻度和標簽

1.8?添加圖例和標題

1.9 設置中文顯示

1.10 調整子圖布局

二、常用繪圖教程

2.1?折線圖?

2.2 散點圖

2.3?直方圖

2.4?餅圖

?編輯


一、初識Matploblib

Matplotlib是Python中的繪圖庫,類似于MATLAB,可以用來繪制各種靜態,動態,交互式的圖表。

1.1 安裝 Matplotlib

首先需要安裝 Matplotlib 庫:

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

1.2、Matplotlib 的兩種接口風格

Matplotlib 提供了兩種主要使用方式,適用于不同場景:

pyplot 接口(類似 MATLAB 風格)
這種方式通過?plt?模塊直接調用函數,自動管理圖形和子圖狀態,適合快速繪圖和簡單場景。
示例:

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))  # 自動創建figure和axes
plt.title("pyplot接口示例")
plt.show()

面向對象接口(OO 風格)
顯式創建?Figure(畫布)和?Axes(子圖)對象,通過對象方法操作,適合復雜繪圖(如多子圖、定制化布局)。
示例:

import matplotlib.pyplot as plt
import numpy as npfig, ax = plt.subplots()  # 顯式創建figure和axes
ax.plot(x, np.sin(x))
ax.set_title("面向對象接口示例")
fig.show()

區別與選擇:簡單繪圖用 pyplot 更簡潔;復雜場景(如多子圖聯動、自定義坐標軸)必須用 OO 接口,可控性更強。

1.3、Figure 和 Axes 的深度理解

Figure(畫布)

  • 整個繪圖窗口,是所有元素的容器。
  • 可通過?figsize=(width, height)?控制大小(單位:英寸),dpi?控制分辨率(默認 100)。

Axes(子圖)

一個 Figure 可包含多個 Axes(如 2×2 網格的子圖),每個 Axes 是一個獨立的繪圖區域。

1.4 設置畫布大小

在使用matplotlib作圖時,會遇到圖片顯示不全或者圖片大小不是我們想要的,這個時候就需要調整畫布大小。下例左圖為500*500像素,右圖為1000*1000像素。

import matplotlib.pyplot as plt# 500 x 500 像素(先寬度 后高度)
# 注意這里的寬度和高度的單位是英寸,1英寸=100像素
fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(111)
plt.show()

1.5 設置網格線

通過?axes 對象提供的 grid() 方法可以開啟或者關閉畫布中的網格以及網格的主/次刻度。除此之外,grid() 函數還可以設置網格的顏色、線型以及線寬等屬性。

grid() 的函數使用格式如下

grid(color='b', ls = '-.', lw = 0.25)

參數含義如下:

  • color:表示網格線的顏色;
  • ls:表示網格線的樣式;
  • lw:表示網格線的寬度;

網格在默認狀態下是關閉的,通過調用上述函數,網格會被自動開啟,如果只是想開啟不帶任何樣式的網格,可以通過 grid(True) 來實現。

實例如下:

import matplotlib.pyplot as plt
import numpy as np# fig畫布;axes子圖區域
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
x = np.arange(1, 11)
axes[0].plot(x, x ** 3, 'g', lw=2)
# 開啟網格
axes[0].grid(True)
axes[0].set_title('default grid')
axes[1].plot(x, np.exp(x), 'r')
# 設置網格的顏色,線型,線寬
axes[1].grid(color='b', ls='-.', lw=0.25)
axes[1].set_title('custom grid')
axes[2].plot(x, x)
axes[2].set_title('no grid')
fig.tight_layout()
plt.show()

1.6?設置坐標軸

set_xlabel?用字符串列表來設置坐標軸的標簽,fontdict?設置軸標簽的字體和字號等參數。

import matplotlib.pyplot as plt
import numpy as npfontdict = {'weight': 'normal', 'family': 'Times New Roman', 'size': 20}fig, axes = plt.subplots(1, 1)
x = np.arange(1, 5)
axes.plot(x, np.exp(x))
axes.plot(x, x ** 2)# 設置標題
axes.set_title("Normal scale", fontdict=fontdict)# 設置x、y軸標簽
axes.set_xlabel("x axis", fontdict=fontdict)
axes.set_ylabel("y axis", fontdict=fontdict)plt.show()

Matplotlib 可以根據自變量與因變量的取值范圍,自動設置 x 軸與 y 軸的數值大小。當然,您也可以用自定義的方式,通過 set_xlim() 和 set_ylim() 對 x、y 軸的數值范圍進行設置。

import matplotlib.pyplot as plt
import numpy as npfig, a1 = plt.subplots(1, 1)x = np.arange(1, 10)
a1.plot(x, np.exp(x), 'r')
a1.set_title('exp')
# 設置y軸
a1.set_ylim(0, 4000)
# 設置x軸
a1.set_xlim(0, 8)
plt.show()

1.7 設置刻度和標簽

刻度指的是軸上數據點的標記,Matplotlib 能夠自動的在 x 、y 軸上繪制出刻度。這一功能的實現得益于 Matplotlib 內置的刻度定位器和格式化器(兩個內建類)。在大多數情況下,這兩個內建類完全能夠滿足我們的繪圖需求,但是在某些情況下,刻度標簽或刻度也需要滿足特定的要求,比如將刻度設置為“英文數字形式”或者“大寫阿拉伯數字”,此時就需要對它們重新設置。
?

下面示例介紹了刻度和標簽的使用方法,其中對標簽逆時針旋轉了90°:

import matplotlib.pyplot as plt
import numpy as np
import mathx = np.arange(0, math.pi * 2, 0.05)fig, ax = plt.subplots(1, 1, figsize=(10, 6))y = np.sin(x)
ax.plot(x, y)
# 設置x軸標簽
ax.set_xlabel('angle')
# ax.set_title('sine')
ax.set_xticks([0, 2, 4, 6])
# 設置x軸刻度標簽,并旋轉90°
ax.set_xticklabels(['zero', 'two', 'four', 'six'], rotation=90)
# 設置y軸刻度
ax.set_yticks([-1, 0, 1])
plt.show()

1.8?添加圖例和標題

圖例通過ax.legend或者plt.legend()實現,標題通過ax.set_title()或者plt.title()實現,基本用法如下例所示。

import matplotlib as mplmpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = Falseimport matplotlib.pyplot as plt
import numpy as npfig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(-2 * np.pi, 2 * np.pi, 200)
y = np.sin(x)
y1 = np.cos(x)ax.plot(x, y, label=r"$\sin(x)$")
ax.plot(x, y1, label=r"$\cos(x)$")ax.legend(loc="best")  # 顯示圖例,loc="best"表示自動選擇最佳位置放置圖例
ax.set_title("正弦函數和余弦函數的折線圖")  # 設置圖表的標題
plt.show()  

調整圖例

對于圖例,我們還可以通過改變legend()的參數來改變圖例的顯示位置,展示樣式(包括圖例的外邊框、圖例中的文本標簽的排列位置和圖例的投影效果等方面)。

import matplotlib.pyplot as plt
import numpy as npx = np.arange(0, 2.1, 0.1)
y = np.power(x, 3)
y1 = np.power(x, 2)
y2 = np.power(x, 1)plt.plot(x, y, ls="-", lw=2, label="$x^{3}$")
plt.plot(x, y1, c="r", ls="-", lw=2, label="$x^{2}$")
plt.plot(x, y2, c="y", ls="-", lw=2, label="$x^{1}$")plt.legend(loc="upper left", bbox_to_anchor=(0.05, 0.95),ncol=3, title="power function", shadow=True,fancybox=True)
plt.show()

loc="upper left":指定圖例的大致位置為左上角。這是一個初始參考位置,實際位置會結合bbox_to_anchor參數進行調整。

bbox_to_anchor=(0.05, 0.95):這是一個關鍵參數,用于精確調整圖例的位置。它接收一個元組(x, y),其中的坐標是相對于圖表的整個繪圖區域(默認是 axes 坐標系,即左下角為 (0,0),右上角為 (1,1))。這里(0.05, 0.95)表示圖例的左上角頂點位于繪圖區域水平方向 0.05(5%)、垂直方向 0.95(95%)的位置。

ncol=3:設置圖例中標簽的列數為 3 列。如果圖例包含多個條目,它們會按 3 列的形式排列,使布局更合理。

title="power function":為圖例添加標題,標題內容為 “power function”,會顯示在圖例的上方。

shadow=True:使圖例添加陰影效果,增強圖例的立體感和視覺層次感。

fancybox=True:設置圖例的邊框為圓角矩形,而默認的是直角矩形。

?plt.legend()的位置參數loc也可以使用數字,其對應如下:

字符串位置編號位置表述
best0最佳位置
upper right1右上角
upper left2左上角
lower left3右下角
lower right4左下角
right5右側
center left6左側垂直居中
center right7右側垂直居中
lower center8下方水平居中
upper center9上方水平居中
center10正中間

1.9 設置中文顯示

Matplotlib 默認不支持中文字體,只支持 ASCII 字符,但中文標注更加符合中國人的閱讀習慣。

當直接使用中文時,Matplotlib 繪制的圖像會出現中文亂碼,如左圖所示。通過臨時重寫配置文件的方法,可以解決 Matplotlib 顯示中文亂碼的問題,代碼如下所示:

import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] = ["SimHei"]  # 設置字體
plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號
year = [2017, 2018, 2019, 2020]
people = [20, 40, 60, 70]
# 生成圖表
plt.plot(year, people)
plt.xlabel('年份')
plt.ylabel('人口')
plt.title('人口增長')
# 設置縱坐標刻度
plt.yticks([0, 20, 40, 60, 80])
# 設置填充選項:參數分別對應橫坐標,縱坐標,縱坐標填充起始值,填充顏色
plt.fill_between(year, people, 20, color='green')
# 顯示圖表
plt.show()

Windows字體中英文名稱對照

中文名稱

英文名稱

黑體

SimHei

微軟雅黑

Microsoft YaHei

微軟雅黑

Microsoft YaHei

新宋體

NSimSun

新細明體

PMingLiU

細明體

MingLiU

標楷體

DFKai-SB

仿宋

FangSong

楷體

KaiTi

仿宋_GB2312

FangSong_GB2312

楷體_GB2312

KaiTi_GB2312

1.10 調整子圖布局


在pyplot模塊中,調整子圖布局的函數主要用subplots_adjust

subplots_adjust函數的功能為調整子圖的布局參數。對于沒有設置的參數保持不變
?

用法:
matplotlib.pyplot.subplots_adjust(left=None, bottom=None, \
right=None, top=None, wspace=None, hspace=None)

參數:

left:所有子圖整體相對于圖像的左外邊距,距離單位為圖像寬度的比例(小數)。可選參數。浮點數。默認值為0.125。

right:所有子圖整體相對于圖像的右外邊距,距離單位為圖像寬度的比例(小數)。可選參數。浮點數。默認值為0.0。

bottom:所有子圖整體相對于圖像的下外邊距,距離單位為圖像高度的比例(小數)。可選參數。浮點數。默認值為0.11。

top:所有子圖整體相對于圖像的上外邊距,距離單位為圖像高度的比例(小數)。可選參數。浮點數。默認值為0.88。

wspace:子圖間寬度內邊距,距離單位為子圖平均寬度的比例(小數)。浮點數。默認值為0.2。

hspace:子圖間高度內邊距,距離單位為子圖平均高度的比例(小數)。可選參數。浮點數。默認值為0.2。

示例代碼

import matplotlib.pyplot as plt# 原始間距配置
fig, ax = plt.subplots(3, 3)
print(vars(fig.subplotpars))
# 通過subplots_adjust()設置間距配置
plt.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9, wspace=0.5, hspace=0.5)
print(vars(fig.subplotpars))
plt.show()

原始

修改間距后(wspace=0.5, hspace=0.5):

二、常用繪圖教程

2.1?折線圖?

plot()函數畫出一系列的點,并且用線將它們連接起來。

格式:

# 基礎折線圖代碼格式
plt.plot(x,                  # x軸數據(數組或列表)y,                  # y軸數據(數組或列表,與x長度相同)label='曲線名稱',   # 曲線標簽,用于圖例顯示color='blue',       # 線條顏色(支持名稱、十六進制碼等)linestyle='-',      # 線型('-'實線、'--'虛線、':'點線等)linewidth=2,        # 線條寬度(數值越大線越粗)marker='o',         # 數據點標記('o'圓形、's'正方形等)markersize=5        # 數據點標記的大小
)

看下例子:

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 設置字體
plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號
# 生成數據
x = np.linspace(0, 10, 50)  # 0到10之間的50個點
y = np.sin(x)               # 計算正弦值# 繪制折線圖
plt.plot(x, y, color='blue', linewidth=2)# 基本標簽
plt.title('簡單折線圖')
plt.xlabel('X軸')
plt.ylabel('Y軸')# 顯示圖形
plt.show()

?如果需要展示多條線,只需再添加一行plt.plot(x, 其他數據, ...)即可。

2.2 散點圖

只畫點,不用線連接起來。

基本格式:

plt.scatter(x,                  # x軸數據(數組或列表)y,                  # y軸數據(數組或列表,與x長度相同)s=50,               # 散點大小(數值越大點越大)c='blue',           # 散點顏色(支持名稱、數組映射等)marker='o',         # 散點形狀('o'圓形、'+'加號等)alpha=0.7,          # 透明度(0-1之間,值越小越透明)edgecolors='black', # 散點邊緣顏色label='數據點'      # 數據標簽,用于圖例顯示
)

?示例:

import matplotlib.pyplot as plt
import numpy as npx = np.arange(10)
y = np.random.randn(10)
plt.scatter(x, y, color='red', marker='+')
plt.show()

2.3?直方圖

?直方圖用于統計數據出現的次數或者頻率,有多種參數可以調整,見下例:

import matplotlib.pyplot as plt
import numpy as np# 生成示例數據:1000個符合正態分布的隨機數
data = np.random.randn(1000)# 繪制直方圖
n, bins, patches = plt.hist(x=data,               # 要繪制直方圖的數據bins=30,              # 直方圖的分箱數量,越多越精細density=False,        # 是否將直方圖歸一化為概率密度(總和為1)alpha=0.7,            # 透明度,0-1之間color='skyblue',      # 直方圖顏色edgecolor='black'     # 直方圖邊框顏色
)# 添加標題和標簽
plt.title('正態分布數據直方圖', fontsize=14)
plt.xlabel('數值', fontsize=12)
plt.ylabel('頻數', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

2.4?餅圖

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.sans-serif"] = ["SimHei"]  # 設置字體
plt.rcParams["axes.unicode_minus"] = False  # 正常顯示負號
labels = ['蘋果', '香蕉', '橙子', '葡萄', '草莓']  # 各部分標簽
sizes = [35, 25, 20, 15, 5]  # 各部分占比
explode = (0.1, 0, 0, 0, 0)  # 突出顯示特定部分(這里突出顯示第一個部分)# 繪制餅圖
plt.pie(x=sizes,  # 餅圖各部分的數值(會自動計算占比)explode=explode,  # 每個部分的偏移量,用于突出顯示labels=labels,  # 各部分的標簽autopct='%1.1f%%',  # 顯示百分比的格式shadow=True,  # 是否添加陰影效果startangle=90,  # 餅圖的起始角度(0表示從x軸正方向開始)colors=['red', 'yellow', 'orange', 'purple', 'pink']  # 各部分顏色
)# 設置餅圖為正圓形(默認可能為橢圓形)
plt.axis('equal')
# 添加標題
plt.title('水果銷售占比')
# 顯示圖形
plt.show()

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

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

相關文章

Redis高可用架構演進面試筆記

1. 主從復制架構 核心概念Redis單節點并發能力有限,通過主從集群實現讀寫分離提升性能: Master節點:負責寫操作Slave節點:負責讀操作,從主節點同步數據 主從同步流程 全量同步(首次同步)建立連接…

無人機保養指南

定期清潔無人機在使用后容易積累灰塵、沙礫等雜物,需及時清潔。使用軟毛刷或壓縮空氣清除電機、螺旋槳和機身縫隙中的雜質。避免使用濕布直接擦拭電子元件,防止短路。電池維護鋰電池是無人機的核心部件,需避免過度放電或充電。長期存放時應保…

vlm MiniCPM 學習部署實戰

目錄 開源地址: 模型repo下載: 單圖片demo: 多圖推理demo: 論文學習筆記: 部署完整教程: 微調教程: 部署,微調教程,視頻實測 BitCPM4 技術報告 創意&#xff1…

92套畢業相冊PPT模版

致青春某大學同學聚會PPT模版,那些年我們一起走過的歲月PPT模版,某學院某班同學聯誼會PPT模版,匆匆那年PPT模版,青春的紀念冊PPT模版,梔子花開PPT模版,畢業紀念冊PPT模版。 92套畢業相冊PPT模版&#xff1…

爬蟲基礎概念

網絡爬蟲概述 概念 網絡爬蟲(Web Crawler),也稱為網絡蜘蛛(Web Spider)或機器人(Bot),是一種自動化程序,用于系統地瀏覽互聯網并收集網頁信息。它模擬人類瀏覽器行為&…

java8 stream流操作的flatMap

我們來詳細解釋一下 Java 8 Stream API 中的 flatMap 操作。理解 flatMap 的關鍵在于將其與 map 操作進行對比。??核心概念:????map 操作:??作用:將一個流中的每個元素??轉換??為另一個元素(類型可以不同)…

開源UI生態掘金:從Ant Design二次開發到行業專屬組件的技術變現

開源UI生態掘金:從Ant Design二次開發到行業專屬組件的技術變現內容摘要在開源UI生態中,Ant Design作為一款廣受歡迎的UI框架,為開發者提供了強大的基礎組件。然而,面對不同行業的特定需求,僅僅依靠現有的組件往往難以…

Object Sense (OSE):一款從編輯器腳本發展起來的編程語言

引言:從Vim編輯器走出的語言在編程語言的世界里,許多革命性的創新往往源于看似簡單的工具。Object Sense(簡稱OSE)的誕生,便與一款經典文本編輯器——Vim息息相關。它的前身是Vim的腳本語言VimL(Vimscript&…

我考PostgreSQL中級專家證書二三事

1. 為什么選擇PGCE?PostgreSQL的開源特性、高性能和高擴展性早已讓我心生向往,而PGCE認證不僅是對技術能力的認可,更是一張通往更高職業舞臺的“通行證”。官方資料提到,PGCE考試涵蓋性能優化、高可用架構、復雜查詢處理、內核原理…

Java 動態導出 Word 登記表:多人員、分頁、動態表格的最佳實踐

本文詳細講解如何使用 Java 動態導出包含多人員報名表的 Word 文檔,每人占據獨立一頁,并支持動態表格行(如個人經歷)。我們對比了多種實現方案,最終推薦基于 Freemarker XML 模板 或 docx4j 的靈活方式,并…

【element-ui el-table】多選表格勾選時默認勾選了全部,row-key綁定異常問題解決

項目場景: Element-UI的el-table組件row-key使用問題 同一個頁面使用了幾個table,這幾個table都使用了多選,row-key屬性,其中row-key的綁定方式都是用的靜態綁定,row-key“username”或row-key“id”,可正常…

C#注釋技巧與基礎編程示例

以下是一個包含基礎注釋的 C# 程序示例&#xff0c;展示了 C# 中各類注釋的使用方法&#xff1a;using System;namespace BasicCSharpProgram {/// <summary>/// Program 類是應用程序的入口點/// 包含 Main 方法作為程序執行的起點/// </summary>public class Pro…

極客大挑戰2019-HTTP

涵蓋知識&#xff1a;UA頭偽造漏洞&#xff1a;全稱&#xff1a;User-Agent 這個部分包含我們所使用的操作系統版本&#xff0c;cpu&#xff0c;瀏覽器類型等。來源偽造漏洞&#xff1a;在http請求頭中會攜帶一個Referer&#xff0c;這個用來表示服務器用戶是從哪個地方來的X-F…

談談ArrayList與Vector的理解?

目錄 擴容機制 ArrayList擴容源碼 Vector擴容源碼 二者區別 擴展&#xff1a;stack(棧&#xff09; 1.創建stack對象 2. 入棧(先進后出&#xff09; 3.出棧 擴展&#xff1a;舉個例子&#xff1a;實現下字符串逆置&#xff0c;利用stack棧來實現。 從接口實現上&#xff…

【Linux庖丁解牛】— 多線程同步 !

1. 什么是線程同步為什么會有線程同步&#xff0c;那一定是有了新問題。互斥可以解決臨界資源被同時訪問的問題&#xff0c;但是純互斥也會帶來新的問題。由于當前被執行的線程離cpu最近【其他線程被阻塞掛起還要被喚醒】&#xff0c;所以&#xff0c;當前進程對于競爭鎖天然就…

基于arduino uno r3主控的環境監測系統設計-1

準備設計arduino uno r3為主控的環境監測系統&#xff0c;通過傳感器采集TVOC&#xff08;總揮發性有機物&#xff09;、HCHO&#xff08;甲醛&#xff09;和eCO2&#xff08;等效二氧化碳&#xff09;數據&#xff0c;并顯示在LCD屏幕上&#xff0c;同時支持數據記錄到SD卡&am…

ITIL 4:云計算與微服務對組織架構的影響

這幾年&#xff0c;很多組織在推進數字化轉型時遇到一個共同的問題&#xff1a;業務節奏越來越快&#xff0c;但內部協作的“架構”卻越來越跟不上節奏。技術架構的變革&#xff0c;必須同步推動組織架構的重塑。特別是隨著云計算和微服務架構的廣泛應用&#xff0c;這種影響愈…

【Android】xml和Java兩種方式實現發送郵件頁面

三三要成為安卓糕手 一&#xff1a;xml中LinearLayout布局參數的使用 1&#xff1a;xml代碼 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http:/…

美林數據用大模型重構電能質量評估,讓隱蔽合規問題無所遁形

在“雙碳”目標驅動下&#xff0c;電網企業正加速推進數字化轉型&#xff0c;電能質量評估作為電力系統安全運行的核心環節&#xff0c;其合規性與效率直接影響著電網智能化水平。然而&#xff0c;傳統人工審核模式已難以應對海量報告與復雜標準——單份報告需20-30人天核對、關…

前端基礎 JS Vue3 Ajax

一、JSalert( .... ) //彈出框console.log( ....... ) //輸出到控制臺瀏覽器JS引入方式&#xff1a;1、內部腳本&#xff1a;將JS代碼定義在HTML頁面中位于<script></script>標簽之間2、外部腳本&#xff1a;將JS代碼寫在外部JS文件中&#xff0c;在HTML頁面中使用…