亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python中matplotlib的用法及繪制簡單圖形詳解

 更新時(shí)間:2024年03月20日 09:37:40   作者:WDLOVELONGLONG  
這篇文章主要給大家介紹了關(guān)于python中matplotlib的用法及繪制簡單圖形的相關(guān)資料,matplotlib是python中用于繪制各種圖像的模塊,功能十分強(qiáng)大,通常與pandas模塊搭配使用,可以生成各種樣視的圖片,用于數(shù)據(jù)的分析和展示,需要的朋友可以參考下

一、matplotlib簡介

Matplotlib 是 Python 生態(tài)系統(tǒng)的一個(gè)重要組成部分,是用于可視化的繪圖庫,它提供了一整套和 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'] 動(dòng)態(tài)配置和通過 matplotlib.rc() 函數(shù)配置。

1.1 通過配置文件進(jìn)行配置

配置文件同樣可以分為幾個(gè)不同的級別,如果我們希望修改所有的圖形使用的默認(rèn)配置,則需要修改全局默認(rèn)配置;而如果我們需要根據(jù)不同任務(wù)使用不同的配置,或者不同用戶使用不同的配置,則需要修改局部配置文件,以能夠在不同的用戶和任務(wù)中使用不同圖形配置。根據(jù)配置文件的作用范圍,可以分為三個(gè)級別:全局配置文件、用戶級配置文件和當(dāng)前任務(wù)配置文件。 不同系統(tǒng)三個(gè)級別的文件位于不同目錄,可以通過使用以下代碼,查看配置文件的路徑:

import matplotlib as mpl
import os
?
# 全局配置目錄
print(mpl.__path__)
# 當(dāng)前用戶配置目錄
print(mpl.get_configdir())
# 當(dāng)前任務(wù)配置目錄,即當(dāng)前代碼運(yùn)行目錄
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,即位于代碼運(yùn)行目錄之下,可以用于為當(dāng)前任務(wù)的代碼定制 Matplotlib 配置,默認(rèn)情況下不存在此文件,即默認(rèn)使用全局或當(dāng)前用戶配置文件,我們可以根據(jù)需要?jiǎng)?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(): 這個(gè)方法返回一個(gè)包含當(dāng)前matplotlib運(yùn)行時(shí)配置參數(shù)的字典。這些配置參數(shù)包括圖形元素的默認(rèn)顏色、線條樣式、字體設(shè)置、坐標(biāo)軸配置等等。通過查看這些參數(shù),可以了解當(dāng)前matplotlib的配置,以便更好地了解圖形的繪制方式和樣式設(shè)置。

  • mpl.rcParamsDefault: 這個(gè)屬性返回matplotlib的默認(rèn)運(yùn)行時(shí)配置參數(shù)。這些默認(rèn)配置參數(shù)是在matplotlib庫安裝時(shí)預(yù)先設(shè)定的值。如果想恢復(fù)matplotlib的默認(rèn)設(shè)置,可以使用這些默認(rèn)參數(shù)進(jìn)行重置。

  • mpl.rcParams: 這個(gè)屬性包含當(dāng)前matplotlib的運(yùn)行時(shí)配置參數(shù),代表了當(dāng)前的matplotlib配置??梢栽谶\(yùn)行時(shí)通過修改這些參數(shù)來自定義圖形的顯示和樣式。例如,可以修改圖形的默認(rèn)顏色、線條樣式、字體設(shè)置、坐標(biāo)軸配置等等,以滿足特定的需求和美學(xué)要求。

使用 rcParams['param_name'] 方式修改配置的方式如下,其中 param_name 表示屬性名:

示例:

mpl.rcParams['lines.linewidth'] = 2
# 修改線條顏色為紅色
mpl.rcParams['lines.color'] = 'r'

在實(shí)際應(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ù)的第一個(gè)參數(shù)為 group 表示屬性所屬的組,用于限定屬性的作用域,例如在以上示例中線寬 linewidth 屬于線 lines 用于限定只在線條中起作用,而對坐標(biāo)軸等線寬 linewidth 不起作用,如果想要修改包括坐標(biāo)軸在內(nèi)的圖形線寬 linewidth 則需要使用:

# 修改整個(gè)圖形線寬
mpl.rc('axes', linewidth=2)

二、matplotlib繪制簡單圖形

Matplotlib在圖(Figure)(例如,窗口,Jupyter小部件等)上繪制數(shù)據(jù),圖可以包含一個(gè)或多個(gè)軸域(Axes)。

2.1 利用plt.subplots繪圖

Axes是一個(gè)可以根據(jù)x-y坐標(biāo)指定點(diǎn)的繪圖區(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)建一個(gè)圖fig, 默認(rèn)包含一個(gè)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個(gè)Axes
fig, axs = plt.subplots(2, 2)  # 有2x2(兩行兩列) 個(gè)Axes

通常,將軸域(Axes)與 Figure 一起創(chuàng)建很方便,也可以在以后手動(dòng)添加軸域。

2.2.2 軸域 Axes

軸域(Axes)是附加到圖(Figure)上,包含用于繪制數(shù)據(jù)的圖形。

通常包括兩個(gè)軸(Axis)對象。兩個(gè)軸分別提供刻度(ticks)和標(biāo)簽(tick label),以便為軸中的數(shù)據(jù)提供比例。每個(gè)軸域還有一個(gè)標(biāo)題(通過 set_title())設(shè)置)、一個(gè) x 標(biāo)簽(通過 set_xlabel()) 設(shè)置)和一個(gè)y 標(biāo)簽(通過 set_ylabel()) 設(shè)置)。

Axes 類及其成員函數(shù)是使用 OOP 接口的主要入口點(diǎn),并且在其上定義了大多數(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ù)藝術(shù)家都與軸域關(guān)聯(lián);這樣的藝術(shù)家不能由多個(gè)軸域共享,也不能從一個(gè)軸移動(dòng)到另一個(gè)軸。

2.2.5 繪圖函數(shù)的輸入數(shù)據(jù)類型

繪圖函數(shù)接收 numpy.arraynumpy.ma.masked_array作為輸入,或者是可以被傳遞給numpy.asarray的數(shù)據(jù)。pandas數(shù)據(jù)或numpy.matrix可能不會(huì)正常工作。常見的約定是在繪圖前將數(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.recarraypandas.DataFrame.

Matplotlib允許使用關(guān)鍵字參數(shù)生成圖像,傳遞和x,y相應(yīng)的字符串:

scatter方法通常是由數(shù)據(jù)可視化庫(如Matplotlib或Seaborn)提供的一個(gè)函數(shù),用于繪制散點(diǎn)圖:

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ù),是一個(gè)數(shù)組或Series,用于表示散點(diǎn)圖中每個(gè)點(diǎn)的橫坐標(biāo)位置。

  • y:縱坐標(biāo)數(shù)據(jù),是一個(gè)數(shù)組或Series,用于表示散點(diǎn)圖中每個(gè)點(diǎn)的縱坐標(biāo)位置。

  • s:點(diǎn)的大小,可以是一個(gè)數(shù)值或數(shù)組,控制散點(diǎn)的大小。默認(rèn)值為 None,表示使用默認(rèn)點(diǎn)大小。

  • c:點(diǎn)的顏色,可以是一個(gè)顏色字符串、顏色列表或數(shù)組,用于控制散點(diǎn)的顏色。默認(rèn)值為 None,表示使用默認(rèn)顏色。

  • marker:點(diǎn)的標(biāo)記樣式,可以是一個(gè)標(biāo)記字符串,例如 'o' 表示圓點(diǎn),'s' 表示方塊等。默認(rèn)值為 None,表示使用默認(rèn)標(biāo)記樣式。

  • cmap:用于指定顏色映射的Colormap對象或字符串。它在指定c參數(shù)為數(shù)值時(shí)使用,將數(shù)值映射到顏色空間。默認(rèn)值為 None,表示使用默認(rèn)顏色映射。

  • norm:用于歸一化數(shù)據(jù)的Normalize對象。它在指定c參數(shù)為數(shù)值時(shí)使用。默認(rèn)值為 None,表示使用默認(rèn)的歸一化方式。

  • vmin 和 vmax:用于設(shè)置顏色映射范圍的最小值和最大值。它們在指定c參數(shù)為數(shù)值時(shí)使用。默認(rèn)值為 None,表示使用數(shù)據(jù)的最小值和最大值作為范圍。

  • alpha:點(diǎn)的透明度,取值范圍為 [0, 1],其中 0 表示完全透明,1 表示完全不透明。默認(rèn)值為 None,表示使用默認(rèn)透明度。

  • linewidths:點(diǎn)邊界的寬度,用于控制點(diǎn)的邊界線寬度。默認(rèn)值為 None,表示使用默認(rèn)線寬。

  • edgecolors:點(diǎn)邊界的顏色,用于控制點(diǎn)的邊界線顏色。默認(rèn)值為 None,表示使用默認(rèn)顏色。

示例:

np.random.seed(19680801)  # 偽隨機(jī)數(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列個(gè)子圖,存放在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ù)。在這個(gè)例子中,'a'和'b'都是包含50個(gè)數(shù)據(jù)點(diǎn)的numpy數(shù)組,用于繪制散點(diǎn)圖的橫坐標(biāo)和縱坐標(biāo)。

  • c='c':這是設(shè)置散點(diǎn)的顏色參數(shù)。在這里,'c'代表顏色,意味著每個(gè)散點(diǎn)的顏色將由data['c']中的數(shù)據(jù)決定。data['c']是一個(gè)包含50個(gè)隨機(jī)整數(shù)的numpy數(shù)組,它將為每個(gè)數(shù)據(jù)點(diǎn)指定顏色。

  • s='d':這是設(shè)置散點(diǎn)的大小參數(shù)。在這里,'d'代表大小,意味著每個(gè)散點(diǎn)的大小將由data['d']中的數(shù)據(jù)決定。data['d']是一個(gè)包含50個(gè)隨機(jī)浮點(diǎn)數(shù)的numpy數(shù)組,它將為每個(gè)數(shù)據(jù)點(diǎn)指定大小。

  • data=data:這個(gè)參數(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 自動(dòng)創(chuàng)建和管理圖形和軸,并使用 pyplot 函數(shù)進(jìn)行繪圖。

使用OO樣式,覺得OO樣式比較好,只需要在軸域(Axes)對象上設(shè)置就可以,非常清晰,示例:

plt.subplots() 是Matplotlib庫中用于創(chuàng)建子圖(subplot)的函數(shù)。它可以一次性創(chuàng)建一個(gè)包含多個(gè)子圖的圖形,并將這些子圖存儲在一個(gè)NumPy數(shù)組(np.array類型)中,使得對多個(gè)子圖進(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,即每個(gè)子圖都有獨(dú)立的x軸。

  • sharey:如果設(shè)置為True,則所有子圖將共享相同的y軸(即縱坐標(biāo))。默認(rèn)值為False,即每個(gè)子圖都有獨(dú)立的y軸。

  • squeeze:如果設(shè)置為True,則當(dāng)行數(shù)或列數(shù)為1時(shí),返回的子圖數(shù)組將是壓縮的。如果設(shè)置為False,則無論行數(shù)和列數(shù)是多少,返回的子圖數(shù)組都是二維數(shù)組。默認(rèn)值為True。

  • subplot_kw:是一個(gè)字典,用于傳遞給每個(gè)子圖的配置參數(shù)。例如,您可以使用該參數(shù)設(shè)置標(biāo)題、軸標(biāo)簽等屬性。

  • gridspec_kw:是一個(gè)字典,用于傳遞給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)生兩個(gè)對象 圖和軸域 (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)建圖形和子圖的語句。讓我來解釋每個(gè)參數(shù)的含義:

  • figsize=(5, 2.7):這是用于設(shè)置圖形大小的參數(shù)。figsize是一個(gè)元組,包含兩個(gè)元素,分別表示圖形的寬度和高度(單位是英寸)。在這里,設(shè)置圖形的寬度為5英寸,高度為2.7英寸。

  • layout='constrained':這是一個(gè)非常特殊的參數(shù),它在Matplotlib中沒有直接定義的意義。實(shí)際上,這個(gè)參數(shù)并不是Matplotlib中的標(biāo)準(zhǔn)參數(shù),所以在這個(gè)具體的代碼片段中,layout='constrained' 可能不會(huì)被正確地解釋或產(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)文章

最新評論