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