python中matplotlib的用法及繪制簡單圖形詳解
一、matplotlib簡介
Matplotlib
是 Python
生態(tài)系統(tǒng)的一個重要組成部分,是用于可視化的繪圖庫,它提供了一整套和 matlab
相似的命令 API
和可視化界面,可以生成出版質(zhì)量級別的精美圖形,Matplotlib
使繪圖變得非常簡單,在易用性和性能間取得了優(yōu)異的平衡。
安裝成功后,即可以在 Python
中像使用其它庫一樣導入和使用 Matplotlib
,而無需更多文件的配置,通常我們將其導入后使用別名 mpl
:
import matplotlib as mpl
Matplotlib
的配置更多的用于修改繪制圖形的默認樣式,Matplotlib
的配置文件中包含了各種默認的圖形配置信息,我們可以通過修改這些配置信息修改全局參數(shù)進行自定義所繪制圖形的樣式,這些參數(shù)可以改變圖形尺寸、配色方案、字體等一系列信息。 可以使用多種方式完成 Matplotlib
的繪圖配置,以下介紹三種配置方式通過配置文件
進行配置、通過 rcParams['param_name']
動態(tài)配置和通過 matplotlib.rc()
函數(shù)配置。
1.1 通過配置文件進行配置
配置文件同樣可以分為幾個不同的級別,如果我們希望修改所有的圖形使用的默認配置,則需要修改全局默認配置;而如果我們需要根據(jù)不同任務使用不同的配置,或者不同用戶使用不同的配置,則需要修改局部配置文件,以能夠在不同的用戶和任務中使用不同圖形配置。根據(jù)配置文件的作用范圍,可以分為三個級別:全局配置文件、用戶級配置文件和當前任務配置文件。 不同系統(tǒng)三個級別的文件位于不同目錄,可以通過使用以下代碼,查看配置文件的路徑:
import matplotlib as mpl import os ? # 全局配置目錄 print(mpl.__path__) # 當前用戶配置目錄 print(mpl.get_configdir()) # 當前任務配置目錄,即當前代碼運行目錄 print(os.getcwd())
全局配置文件
mpl-data\matplotlibrc
,位于Matplotlib
的安裝目錄直線,例如在Window
下將其安裝在D:\Program Files\Python39\lib\site-packages\matplotlib
目錄下,則全局配置文件的完整文件名為D:\Program Files\Python39\lib\site-packages\matplotlib\mpl-data\matplotlibrc
,默認情況下,圖形使用此配置文件進行繪制。用戶級配置文件
.matplotlib\matplotlibrc
,位于用戶目錄之下,例如,用戶目錄為C:\Users\Brainiac\
,則相應配置文件為C:\Users\Brainiac\.matplotlib\matplotlibc
;如果不存在此文件,也可以根據(jù)全局配置文件與用戶需求自定創(chuàng)建和修改。當前任務配置文件
matplotlibrc
,即位于代碼運行目錄之下,可以用于為當前任務的代碼定制Matplotlib
配置,默認情況下不存在此文件,即默認使用全局或當前用戶配置文件,我們可以根據(jù)需要創(chuàng)建此文件,并根據(jù)需要進行配置。
1.2 通過 rcParams[‘param_name’] 配置
如果僅僅想在當前文件中簡單修改自定義配置,則可以通過 rcParams['param_name']
更快速的修改。通過使用以下代碼,可以查看能夠自定義配置的屬性有哪些:
print(mpl.rc_params()) print(mpl.rcParamsDefault) print(mpl.rcParams)
mpl.rc_params()
: 這個方法返回一個包含當前matplotlib運行時配置參數(shù)的字典。這些配置參數(shù)包括圖形元素的默認顏色、線條樣式、字體設置、坐標軸配置等等。通過查看這些參數(shù),可以了解當前matplotlib的配置,以便更好地了解圖形的繪制方式和樣式設置。mpl.rcParamsDefault
: 這個屬性返回matplotlib的默認運行時配置參數(shù)。這些默認配置參數(shù)是在matplotlib庫安裝時預先設定的值。如果想恢復matplotlib的默認設置,可以使用這些默認參數(shù)進行重置。mpl.rcParams
: 這個屬性包含當前matplotlib的運行時配置參數(shù),代表了當前的matplotlib配置。可以在運行時通過修改這些參數(shù)來自定義圖形的顯示和樣式。例如,可以修改圖形的默認顏色、線條樣式、字體設置、坐標軸配置等等,以滿足特定的需求和美學要求。
使用 rcParams['param_name']
方式修改配置的方式如下,其中 param_name
表示屬性名:
示例:
mpl.rcParams['lines.linewidth'] = 2 # 修改線條顏色為紅色 mpl.rcParams['lines.color'] = 'r'
在實際應用中,最常用的兩種配置包括中文和中文負號的顯示,如果不進行配置,默認不支持顯示中文與中文負號:
#顯示中文 mpl.rcParams['font.sans-serif'] = ['SimHei'] #顯示負號 mpl.rcParams['axes.unicode_minus']=False
1.3 通過 matplotlib.rc() 函數(shù)配置
同樣我們也可以使用 matplotlib.rc()
函數(shù)進行配置,使用方法如下:
# 修改線寬 mpl.rc('lines', linewidth=2, color='g')
其中 rc
函數(shù)的第一個參數(shù)為 group
表示屬性所屬的組,用于限定屬性的作用域,例如在以上示例中線寬 linewidth
屬于線 lines
用于限定只在線條中起作用,而對坐標軸等線寬 linewidth
不起作用,如果想要修改包括坐標軸在內(nèi)的圖形線寬 linewidth
則需要使用:
# 修改整個圖形線寬 mpl.rc('axes', linewidth=2)
二、matplotlib繪制簡單圖形
Matplotlib在圖(Figure)(例如,窗口,Jupyter小部件等)上繪制數(shù)據(jù),圖可以包含一個或多個軸域(Axes)。
2.1 利用plt.subplots繪圖
Axes是一個可以根據(jù)x-y坐標指定點的繪圖區(qū)域(或極坐標圖中的θ-r,3D圖中的x-y-z等)。創(chuàng)建帶有Axes的圖的最簡單方法是使用 pyplot.subplots。然后,可以使用Axes.plot在Axes上繪制一些數(shù)據(jù):
例如:
x = np.arange(-10,11) y = x**2 -2*x + 9 fig,ax = plt.subplots() # 創(chuàng)建一個圖fig, 默認包含一個axes ax.plot(x,y) # 繪制x-y的折線圖 plt.show() # 顯示繪制的圖。請注意,如果使用save保存圖片,需要在show前面保存
2.2 圖(Figure)的結構
一幅圖有下面這些部分:標題(Title)、圖例(Legend)、x、y軸標簽(xlabel、ylabel)等,示意圖如下:
2.2.1 圖 Figure
完整的圖像。該圖跟蹤所有子軸域(Axes)---- 一組“特殊”畫作(標題,圖例,彩條等),甚至嵌套的子圖。
創(chuàng)建新圖的最簡單方法是使用 pyplot:
fig = plt.figure() # 空圖,沒有Axes fig, ax = plt.subplots() #有1個Axes fig, axs = plt.subplots(2, 2) # 有2x2(兩行兩列) 個Axes
通常,將軸域(Axes)與 Figure 一起創(chuàng)建很方便,也可以在以后手動添加軸域。
2.2.2 軸域 Axes
軸域(Axes)是附加到圖(Figure)上,包含用于繪制數(shù)據(jù)的圖形。
通常包括兩個軸(Axis)對象。兩個軸分別提供刻度(ticks)和標簽(tick label),以便為軸中的數(shù)據(jù)提供比例。每個軸域還有一個標題(通過 set_title())設置)、一個 x 標簽(通過 set_xlabel()) 設置)和一個y 標簽(通過 set_ylabel()) 設置)。
Axes 類及其成員函數(shù)是使用 OOP 接口的主要入口點,并且在其上定義了大多數(shù)繪圖方法ax.plot()
2.2.3 軸 Axis
軸設置刻度(scale)和限制(limits)并且生成刻度(ticks,軸上的標記)和刻度標簽(ticklabels,標記刻度的字符串)ticks位置由定位器(Locator)確定,ticklabel 字符串由格式器(Formatter)設置。正確的定位器(Locator)和格式器(Formatter)的組合可以對刻度位置和標簽進行非常精細的控制。
2.2.4 Artist
rtist這里翻譯成藝術家或畫家。
基本上,圖形上可見的所有內(nèi)容都是藝術家(甚至是圖形,軸域和軸對象)。這包括文本、Line2D 、集合、Patch等。渲染圖形時,所有藝術家都將被繪制到畫布上。大多數(shù)藝術家都與軸域關聯(lián);這樣的藝術家不能由多個軸域共享,也不能從一個軸移動到另一個軸。
2.2.5 繪圖函數(shù)的輸入數(shù)據(jù)類型
繪圖函數(shù)接收 numpy.array
或numpy.ma.masked_array
作為輸入,或者是可以被傳遞給numpy.asarray
的數(shù)據(jù)。pandas數(shù)據(jù)或numpy.matrix
可能不會正常工作。常見的約定是在繪圖前將數(shù)據(jù)轉(zhuǎn)換成numpy.array
,示例:
b = np.matrix([[1, 2], [3, 4]]) b_asarray = np.asarray(b) # 使用np.asarray()將其轉(zhuǎn)換成np.array類型
大多數(shù)方法還可以解析可尋址對象,如 dict
,np.recarray
或pandas.DataFrame
.
Matplotlib允許使用關鍵字參數(shù)生成圖像,傳遞和x,y相應的字符串:
scatter方法通常是由數(shù)據(jù)可視化庫(如Matplotlib或Seaborn)提供的一個函數(shù),用于繪制散點圖:
Matplotlib中scatter方法的參數(shù)和用法:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None)
參數(shù)解釋:
x
:橫坐標數(shù)據(jù),是一個數(shù)組或Series,用于表示散點圖中每個點的橫坐標位置。y
:縱坐標數(shù)據(jù),是一個數(shù)組或Series,用于表示散點圖中每個點的縱坐標位置。s
:點的大小,可以是一個數(shù)值或數(shù)組,控制散點的大小。默認值為None
,表示使用默認點大小。c
:點的顏色,可以是一個顏色字符串、顏色列表或數(shù)組,用于控制散點的顏色。默認值為None
,表示使用默認顏色。marker
:點的標記樣式,可以是一個標記字符串,例如 'o' 表示圓點,'s' 表示方塊等。默認值為None
,表示使用默認標記樣式。cmap
:用于指定顏色映射的Colormap對象或字符串。它在指定c參數(shù)為數(shù)值時使用,將數(shù)值映射到顏色空間。默認值為None
,表示使用默認顏色映射。norm
:用于歸一化數(shù)據(jù)的Normalize對象。它在指定c參數(shù)為數(shù)值時使用。默認值為None
,表示使用默認的歸一化方式。vmin
和vmax
:用于設置顏色映射范圍的最小值和最大值。它們在指定c參數(shù)為數(shù)值時使用。默認值為None
,表示使用數(shù)據(jù)的最小值和最大值作為范圍。alpha
:點的透明度,取值范圍為 [0, 1],其中 0 表示完全透明,1 表示完全不透明。默認值為None
,表示使用默認透明度。linewidths
:點邊界的寬度,用于控制點的邊界線寬度。默認值為None
,表示使用默認線寬。edgecolors
:點邊界的顏色,用于控制點的邊界線顏色。默認值為None
,表示使用默認顏色。
示例:
np.random.seed(19680801) # 偽隨機數(shù) data = {'a': np.arange(50), 'c': np.random.randint(0, 50, 50), 'd': np.random.randn(50)} data['b'] = data['a'] + 10 * np.random.randn(50) data['d'] = np.abs(data['d']) * 100 ? fig, axes = plt.subplots(2,1) # fig 擁有2行1列個子圖,存放在axes數(shù)組(np.array類型)中。 print(axes) ax = axes[0] ? ax.scatter('a', 'b', c='c', s='d', data=data) ax.set_xlabel('entry a') ax.set_ylabel('entry b') # 軸域2 ,去掉顏色c,形狀s參數(shù)。 ax2 = axes[1] ax2.scatter('a', 'b', data=data) plt.show()
ax.scatter('a', 'b', c='c', s='d', data=data)表示如下:
'a', 'b'`:這是橫軸和縱軸的數(shù)據(jù)。'a'表示橫軸數(shù)據(jù),'b'表示縱軸數(shù)據(jù)。在這個例子中,'a'和'b'都是包含50個數(shù)據(jù)點的numpy數(shù)組,用于繪制散點圖的橫坐標和縱坐標。
c='c'
:這是設置散點的顏色參數(shù)。在這里,'c'代表顏色,意味著每個散點的顏色將由data['c']
中的數(shù)據(jù)決定。data['c']
是一個包含50個隨機整數(shù)的numpy數(shù)組,它將為每個數(shù)據(jù)點指定顏色。s='d'
:這是設置散點的大小參數(shù)。在這里,'d'代表大小,意味著每個散點的大小將由data['d']
中的數(shù)據(jù)決定。data['d']
是一個包含50個隨機浮點數(shù)的numpy數(shù)組,它將為每個數(shù)據(jù)點指定大小。data=data
:這個參數(shù)告訴scatter
函數(shù),要從data
字典中獲取'x'和'y'軸的數(shù)據(jù)(即'a'和'b'),以及顏色和大小參數(shù)('c'和'd')。
2.2.6 編碼風格 Coding Styles,面向?qū)ο螅∣O)和pyplot函數(shù)接口
基本上有兩種使用 Matplotlib 的方法:
顯式創(chuàng)建“圖形(Figures)”和“軸域(Axes)”,并在其上調(diào)用方法(“面向?qū)ο?(OO) 樣式”)。
依靠 pyplot 自動創(chuàng)建和管理圖形和軸,并使用 pyplot 函數(shù)進行繪圖。
使用OO樣式,覺得OO樣式比較好,只需要在軸域(Axes)對象上設置就可以,非常清晰,示例:
plt.subplots()
是Matplotlib庫中用于創(chuàng)建子圖(subplot)的函數(shù)。它可以一次性創(chuàng)建一個包含多個子圖的圖形,并將這些子圖存儲在一個NumPy數(shù)組(np.array類型)中,使得對多個子圖進行管理和操作更加方便。
plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
nrows
:表示子圖的行數(shù),即圖中有幾行子圖。ncols
:表示子圖的列數(shù),即圖中有幾列子圖。sharex
:如果設置為True,則所有子圖將共享相同的x軸(即橫坐標)。默認值為False,即每個子圖都有獨立的x軸。sharey
:如果設置為True,則所有子圖將共享相同的y軸(即縱坐標)。默認值為False,即每個子圖都有獨立的y軸。squeeze
:如果設置為True,則當行數(shù)或列數(shù)為1時,返回的子圖數(shù)組將是壓縮的。如果設置為False,則無論行數(shù)和列數(shù)是多少,返回的子圖數(shù)組都是二維數(shù)組。默認值為True。subplot_kw
:是一個字典,用于傳遞給每個子圖的配置參數(shù)。例如,您可以使用該參數(shù)設置標題、軸標簽等屬性。gridspec_kw
:是一個字典,用于傳遞給GridSpec
對象的配置參數(shù)。GridSpec
用于更靈活地排列子圖,可以用于創(chuàng)建非規(guī)則的子圖布局。**fig_kw
:這里的fig_kw
是傳遞給plt.figure()
的其他關鍵字參數(shù)。plt.figure()
是創(chuàng)建圖形的函數(shù),您可以使用fig_kw
參數(shù)來設置圖形的屬性,例如圖形大小、標題等。
x = np.linspace(0, 2, 100) # 產(chǎn)生一些數(shù)據(jù) ? # 使用OO風格,先產(chǎn)生兩個對象 圖和軸域 (fig, ax) fig, ax = plt.subplots(figsize=(5, 5), layout='constrained') # 調(diào)用ax對象的方法 ax.plot(x, x, label='linear') # Plot some data on the axes. 繪制線性曲線,并給曲線添加標簽'線性' ax.plot(x, x**2, label='quadratic') # Plot more data on the axes...繪制二次方曲線,并給曲線添加標簽'二次方' ax.plot(x, x**3, label='cubic') # ... and some more. 繪制三次方曲線,并給曲線添加標簽'三次方' ax.set_xlabel('x label') # Add an x-label to the axes. ax.set_ylabel('y label') # Add a y-label to the axes. ax.set_title("Simple Plot") # Add a title to the axes. 添加軸域?qū)ο髽祟} ax.legend() # Add a legend. 添加圖例,用于顯示每條曲線對應的標簽 plt.show()
在這段代碼中,fig, ax = plt.subplots(figsize=(5, 2.7), layout='constrained')
是用Matplotlib創(chuàng)建圖形和子圖的語句。讓我來解釋每個參數(shù)的含義:
figsize=(5, 2.7)
:這是用于設置圖形大小的參數(shù)。figsize
是一個元組,包含兩個元素,分別表示圖形的寬度和高度(單位是英寸)。在這里,設置圖形的寬度為5英寸,高度為2.7英寸。layout='constrained'
:這是一個非常特殊的參數(shù),它在Matplotlib中沒有直接定義的意義。實際上,這個參數(shù)并不是Matplotlib中的標準參數(shù),所以在這個具體的代碼片段中,layout='constrained'
可能不會被正確地解釋或產(chǎn)生預期的效果。
在Matplotlib中,plt.subplots()
函數(shù)的layout
參數(shù)并不存在。plt.subplots()
函數(shù)的參數(shù)中,并沒有名為layout
的參數(shù)。如果要控制子圖的布局和排列方式,可以使用plt.subplot()
或plt.GridSpec()
等其他函數(shù)進行更高級的子圖定位和布局設置。
使用pyplot函數(shù)風格:
x = np.linspace(0, 2, 100) # 產(chǎn)生一些數(shù)據(jù) plt.figure(figsize=(5, 5), layout='constrained') plt.plot(x, x, label='linear') # Plot some data on the (implicit) axes. plt.plot(x, x**2, label='quadratic') # etc. plt.plot(x, x**3, label='cubic') plt.xlabel('x label') plt.ylabel('y label') plt.title("Simple Plot") plt.legend() plt.show()
總結
到此這篇關于python中matplotlib的用法及繪制的文章就介紹到這了,更多相關python matplotlib用法詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python解決報錯ImportError: Bad git executable.問題
這篇文章主要介紹了python解決報錯ImportError: Bad git executable.問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06解讀Scrapy回調(diào)函數(shù)callback傳遞參數(shù)的方式
這篇文章主要介紹了解讀Scrapy回調(diào)函數(shù)callback傳遞參數(shù)的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12Python實現(xiàn)數(shù)據(jù)集劃分(訓練集和測試集)
這篇文章主要為大家詳細介紹了Python是如何實現(xiàn)數(shù)據(jù)集劃分的,分為訓練集和測試集,文中的實現(xiàn)方法講解詳細,感興趣的小伙伴可以了解一下2023-05-05Flask框架重定向,錯誤顯示,Responses響應及Sessions會話操作示例
這篇文章主要介紹了Flask框架重定向,錯誤顯示,Responses響應及Sessions會話操作,結合實例形式分析了flask框架中重定向,錯誤顯示,Responses響應及Sessions會話操作相關使用技巧與操作注意事項,需要的朋友可以參考下2019-08-08Python解析JSON數(shù)據(jù)的基本方法實例代碼
JSON (JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式,下面這篇文章主要給大家介紹了關于Python解析JSON數(shù)據(jù)的基本方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-01-01