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

python?matplotlib繪圖詳解大全(非常詳細(xì)!)

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

一、圖形繪制大全

1.1 2D圖形繪制

1.1.1 繪制單線(xiàn)圖形

通過(guò)定義隊(duì)列繪制單線(xiàn)圖:

scale = range(100)
x = [(2 * math.pi * i) / len(scale) for i in scale]
y = [math.cos(i) for i in x]
plt.plot(x, y)
plt.show()

Matplotlib  使用的數(shù)據(jù)可以有不同來(lái)源,接下來(lái),我們以使用  Numpy  獲取的數(shù)據(jù)為例,繪制  [-10,10]  區(qū)間內(nèi)的曲線(xiàn),如以下:

x = np.linspace(-10, 10, 800)
y = x ** 3 + 5 * x - 10
plt.plot(x, y)
plt.show()

plot() 的用法如下:

pythonCopy code
plot(x, y, linestyle=None, marker=None, color=None, label=None, **kwargs)

其中,參數(shù)的含義如下:

  • x : 一維數(shù)組或列表,表示數(shù)據(jù)點(diǎn)在X軸上的位置。

  • y : 一維數(shù)組或列表,表示數(shù)據(jù)點(diǎn)在Y軸上的位置。

  • linestyle : (可選參數(shù)) 字符串,表示線(xiàn)條的樣式。默認(rèn)值為None,表示使用默認(rèn)的線(xiàn)條樣式。你可以指定不同的線(xiàn)條樣式,如實(shí)線(xiàn)('-')、虛線(xiàn)('--')、點(diǎn)劃線(xiàn)('-.')、點(diǎn)線(xiàn)(':')等。

  • marker : (可選參數(shù)) 字符串,表示數(shù)據(jù)點(diǎn)的標(biāo)記類(lèi)型。默認(rèn)值為None,表示不顯示數(shù)據(jù)點(diǎn)的標(biāo)記。你可以指定不同的標(biāo)記類(lèi)型,如圓圈('o')、方塊('s')、三角形('^')等。

  • color : (可選參數(shù)) 字符串,表示線(xiàn)條和標(biāo)記的顏色。默認(rèn)值為None,表示使用默認(rèn)的顏色。你可以使用顏色字符串,如'red'、'blue'、'green'等,也可以使用縮寫(xiě)顏色字符串,如'r'、'b'、'g'等。

  • label : (可選參數(shù)) 字符串,表示線(xiàn)條的標(biāo)簽。默認(rèn)值為None。當(dāng)你想為繪制的線(xiàn)條添加圖例時(shí),可以設(shè)置此標(biāo)簽。

  • **kwargs : (可選參數(shù)) 這是一些可選的關(guān)鍵字參數(shù),用于配置線(xiàn)條的其他屬性,比如線(xiàn)條寬度、透明度等。

通過(guò)傳遞 x y 的數(shù)據(jù),你可以使用 plot() 方法繪制一條線(xiàn)。 linestyle 參數(shù)可選,用于控制線(xiàn)條樣式; marker 參數(shù)可選,用于顯示數(shù)據(jù)點(diǎn)的標(biāo)記; color 參數(shù)可選,用于指定線(xiàn)條和標(biāo)記的顏色; label 參數(shù)可選,用于添加線(xiàn)條的標(biāo)簽,用于圖例顯示。

繪制多條線(xiàn)時(shí),可以多次調(diào)用 plot() 方法,每次傳遞不同的 x y 數(shù)據(jù),并根據(jù)需要設(shè)置不同的樣式和顏色。當(dāng)繪制多條線(xiàn)時(shí),你可以使用 label 參數(shù)為每條線(xiàn)添加標(biāo)簽,然后使用 plt.legend() 來(lái)顯示圖例。

1.1.2 繪制多線(xiàn)圖

很多時(shí)候需要對(duì)比多組數(shù)據(jù),以發(fā)現(xiàn)數(shù)據(jù)間的異同,此時(shí)就需要在一張圖片上繪制多條曲線(xiàn)——多曲線(xiàn)圖,示例如下:

#繪制多線(xiàn)圖
x = np.linspace(0.1, 2 * np.pi, 100)
y_1 = x
y_2 = np.square(x)
y_3 = np.log(x)
y_4 = np.sin(x)
plt.plot(x,y_1)
plt.plot(x,y_2)
plt.plot(x,y_3)
plt.plot(x,y_4)
plt.show()

一條曲線(xiàn)的繪制需要調(diào)用一次  plt.plot() ,而  plt.show()  只需調(diào)用一次。這種延遲呈現(xiàn)機(jī)制是  Matplotlib  的關(guān)鍵特性,我們可以在代碼中的任何地方調(diào)用繪圖函數(shù),但只有在調(diào)用  plt.show()  時(shí)才會(huì)渲染顯示圖形。

比如:

def plot_func(x, y):
x_s = x[1:] - y[:-1]
y_s = y[1:] - x[:-1]
plt.plot(x[1:], x_s / y_s)
x = np.linspace(-5, 5, 200)
y = np.exp(-x ** 2)
plt.plot(x, y)
plot_func(x, y)
plt.show()

盡管其中一個(gè)  plt.plot()  是在  plot_func  函數(shù)中調(diào)用的,它對(duì)圖形的呈現(xiàn)沒(méi)有任何影響,因?yàn)?nbsp; plt.plot()  只是聲明了我們要呈現(xiàn)的內(nèi)容,但還沒(méi)有執(zhí)行渲染。因此可以使用延遲呈現(xiàn)特性結(jié)合  for  循環(huán)、條件判斷等語(yǔ)法完成復(fù)雜圖形的繪制,同時(shí)也可以在同一張圖中組合不同類(lèi)型的統(tǒng)計(jì)圖。

1.1.3 讀取文件中的數(shù)據(jù)繪制圖形

很多情況下數(shù)據(jù)都是存儲(chǔ)于文件中,因此,需要首先讀取文件中的數(shù)據(jù),再進(jìn)行繪制,說(shuō)明起見(jiàn),以  .txt  文件為例,其他諸如  Excel CSV文件  等同樣可以進(jìn)行讀取,并用于可視化繪制。

例如:

x, y = [], []
for line in open('data.txt', 'r'):
values = [float(s) for s in line.split()]
x.append(values[0])
y.append(values[1])
plt.plot(x, y)
plt.show()

1.1.4 繪制散點(diǎn)圖

scatter方法通常是由數(shù)據(jù)可視化庫(kù)(如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ù)解釋?zhuān)?/strong>

  • 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對(duì)象或字符串。它在指定c參數(shù)為數(shù)值時(shí)使用,將數(shù)值映射到顏色空間。默認(rèn)值為  None ,表示使用默認(rèn)顏色映射。

  • norm :用于歸一化數(shù)據(jù)的Normalize對(duì)象。它在指定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)的邊界線(xiàn)寬度。默認(rèn)值為  None ,表示使用默認(rèn)線(xiàn)寬。

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

data = np.random.rand(1000, 2) ?#1000行、2列的隨機(jī)數(shù)數(shù)組,符合均勻分布
plt.scatter(data[:,0], data[:,1])
plt.show()

1.1.5 繪制條形圖

條形圖具有豐富的表現(xiàn)形式,常見(jiàn)的類(lèi)型包括單組條形圖,多組條形圖,堆積條形圖和對(duì)稱(chēng)條形圖等

1.1.5.1 單條條形圖

條形圖的每種表現(xiàn)形式都可以繪制成垂直條形圖或水平條形圖。

1、垂直條形圖

plt.bar 是Matplotlib庫(kù)中用于繪制條形圖的方法。它可以將數(shù)據(jù)以條形的形式展示,非常適合用于顯示不同類(lèi)別或組之間的比較。

使用 plt.bar 的一般語(yǔ)法如下:

pythonCopy code
plt.bar(x, height, width=0.8, align='center', **kwargs)

其中,參數(shù)的意義如下:

  • x : 這是一個(gè)可迭代對(duì)象,通常是一個(gè)列表或數(shù)組,用于指定條形圖的橫坐標(biāo)位置。每個(gè)元素表示一個(gè)條形的橫坐標(biāo)位置。

  • height : 這是一個(gè)可迭代對(duì)象,通常是一個(gè)列表或數(shù)組,用于指定條形圖的高度或長(zhǎng)度。每個(gè)元素表示一個(gè)條形的高度。

  • width : (可選參數(shù)) 這是一個(gè)標(biāo)量或一個(gè)可迭代對(duì)象,用于指定條形的寬度。默認(rèn)值為0.8,表示每個(gè)條形的寬度為0.8個(gè)單位。如果想要自定義每個(gè)條形的寬度,可以傳遞一個(gè)標(biāo)量值或一個(gè)與 x height 長(zhǎng)度相同的可迭代對(duì)象。

  • align : (可選參數(shù)) 這是一個(gè)字符串,用于指定條形的對(duì)齊方式。默認(rèn)值是 'center' ,表示條形在橫坐標(biāo)上居中對(duì)齊。其他可能的取值有 'edge' 表示條形以橫坐標(biāo)左邊緣對(duì)齊,或 'align' 表示條形以橫坐標(biāo)右邊緣對(duì)齊。

  • **kwargs : (可選參數(shù)) 這是一些可選的關(guān)鍵字參數(shù),用于配置條形圖的其他屬性,比如顏色、標(biāo)簽、透明度等。例如,可以使用 color 參數(shù)來(lái)指定條形的顏色, label 參數(shù)來(lái)為條形添加標(biāo)簽等。

一旦調(diào)用了 plt.bar 來(lái)繪制條形圖,可以使用 plt.xlabel 、 plt.ylabel 、 plt.title 等方法來(lái)添加坐標(biāo)軸標(biāo)簽和圖標(biāo)題,以及其他Matplotlib方法來(lái)美化圖形。

data = [10., 20., 5., 15.]
plt.bar(range(len(data)), data, width=0.5)
plt.show()

2、水平條形圖

如果更喜歡水平條形外觀,就可以使用  plt.barh()  函數(shù),在用法方面與  plt.bar()  基本相同,但是修改條形寬度(或者在水平條形圖中應(yīng)該稱(chēng)為高度),需要使用參數(shù)  height

下面是 plt.barh() 方法的一般語(yǔ)法:

plt.barh(y, width, height=0.8, left=None, **kwargs)

其中,參數(shù)的意義如下:

  • y : 這是一個(gè)可迭代對(duì)象,通常是一個(gè)列表或數(shù)組,用于指定條形圖的縱坐標(biāo)位置。每個(gè)元素表示一個(gè)條形的縱坐標(biāo)位置。

  • width : 這是一個(gè)可迭代對(duì)象,通常是一個(gè)列表或數(shù)組,用于指定條形圖的寬度或長(zhǎng)度。每個(gè)元素表示一個(gè)條形的寬度。

  • height : (可選參數(shù)) 這是一個(gè)標(biāo)量或一個(gè)可迭代對(duì)象,用于指定條形的高度。默認(rèn)值為0.8,表示每個(gè)條形的高度為0.8個(gè)單位。如果想要自定義每個(gè)條形的高度,可以傳遞一個(gè)標(biāo)量值或一個(gè)與 y width 長(zhǎng)度相同的可迭代對(duì)象。

  • left : (可選參數(shù)) 這是一個(gè)標(biāo)量或一個(gè)可迭代對(duì)象,用于指定條形的起始值。默認(rèn)值為None,表示每個(gè)條形從0開(kāi)始。如果要實(shí)現(xiàn)堆積效果,可以通過(guò) left 參數(shù)指定每個(gè)條形的起始值。

  • **kwargs : (可選參數(shù)) 這是一些可選的關(guān)鍵字參數(shù),用于配置條形圖的其他屬性,比如顏色、標(biāo)簽、透明度等。

data = [10., 20., 5., 15.]
plt.barh(range(len(data)), data, height=0.5)
plt.show()

1.1.5.2 多組條形圖

當(dāng)出現(xiàn)比較的情況時(shí),可以繪制多組條形圖:

data = [[10., 20., 30., 20.],[40., 25., 53., 18.],[6., 22., 52., 19.]]
x = np.arange(4)
plt.bar(x + 0.00, data[0], color = 'b', width = 0.25)
plt.bar(x + 0.25, data[1], color = 'g', width = 0.25)
plt.bar(x + 0.50, data[2], color = 'r', width = 0.25)
plt.show()

同理,使用barh方法繪制多組水平條形圖:

data = [[10., 20., 30., 20.],[40., 25., 53., 18.],[6., 22., 52., 19.]]
x = np.arange(4)
plt.barh(x + 0.00, data[0], color = 'b', height = 0.25)
plt.barh(x + 0.25, data[1], color = 'g', height = 0.25)
plt.barh(x + 0.50, data[2], color = 'r', height = 0.25)
plt.show()

1.1.5.3 堆積條形圖

通過(guò)使用  plt.bar()  函數(shù)中的可選參數(shù),可以繪制堆積條形圖, plt.bar()  函數(shù)的可選參數(shù)  bottom  允許指定條形圖的起始值。

y_1 = [3., 25., 45., 22.]
y_2 = [6., 25., 50., 25.]
x = range(4)
plt.bar(x, y_1, color = 'b')
plt.bar(x, y_2, color = 'r', bottom = y_1)
plt.show()

如果想要繪制水平的堆積條形圖,則需要使用left來(lái)指定其實(shí)位置:

y_1 = [3., 25., 45., 22.]
y_2 = [6., 25., 50., 25.]
x = range(4)
?
# # 對(duì)y_1和y_2進(jìn)行累加
# y_1_cumsum = np.cumsum(y_1)
# y_2_cumsum = np.cumsum(y_2)
?
plt.barh(x, y_1, color='b', label='y_1')
plt.barh(x, y_2, color='r', left=y_1, label='y_2')
?
plt.legend()
plt.show()

可以結(jié)合  for  循環(huán),利用延遲呈現(xiàn)機(jī)制可以堆疊更多的條形:

data = np.array([[5., 30., 45., 22.], [5., 25., 50., 20.], [1., 2., 1., 1.]])
x = np.arange(data.shape[1])
for i in range(data.shape[0]):
plt.bar(x, data[i], bottom = np.sum(data[:i], axis = 0))
plt.show()

1.1.5.4 對(duì)稱(chēng)條形圖

當(dāng)我們想要繪制不同年齡段的男性與女性數(shù)量的對(duì)比時(shí),一個(gè)簡(jiǎn)單且有用的技巧是對(duì)稱(chēng)繪制兩個(gè)條形圖:

w_pop = np.array([5., 30., 45., 22.])
m_pop = np.array( [5., 25., 50., 20.])
x = np.arange(4)
plt.barh(x, w_pop)
plt.barh(x, -m_pop)
plt.show()

1.1.4 餅圖

餅圖可以用于對(duì)比數(shù)量間的相對(duì)關(guān)系, plt.pie()  函數(shù)將一系列值作為輸入,將值傳遞給  Matplolib ,它就會(huì)自動(dòng)計(jì)算各個(gè)值在餅圖中的相對(duì)面積,并進(jìn)行繪制:

使用 plt.pie() 的一般語(yǔ)法如下:

pythonCopy code
plt.pie(x, explode=None, labels=None, colors=None, autopct=None, shadow=False, startangle=0, **kwargs)

其中,參數(shù)的意義如下:

  • x : 這是一個(gè)1維數(shù)組或列表,表示各個(gè)部分的數(shù)據(jù)值。這些數(shù)據(jù)值將用于計(jì)算各個(gè)部分所占的比例,并繪制餅圖。

  • explode : (可選參數(shù)) 這是一個(gè)1維數(shù)組或列表,用于指定是否將某些部分從餅圖中分離出來(lái)。默認(rèn)值為None,表示不進(jìn)行分離。如果要分離某些部分,可以傳遞一個(gè)與 x 長(zhǎng)度相同的數(shù)組,其中數(shù)值大于0表示分離的距離。

  • labels : (可選參數(shù)) 這是一個(gè)1維數(shù)組或列表,用于指定餅圖中每個(gè)部分的標(biāo)簽。默認(rèn)值為None,表示不顯示標(biāo)簽。如果要顯示標(biāo)簽,可以傳遞一個(gè)與 x 長(zhǎng)度相同的數(shù)組,其中包含各個(gè)部分的標(biāo)簽文本。

  • colors : (可選參數(shù)) 這是一個(gè)1維數(shù)組或列表,用于指定餅圖中每個(gè)部分的顏色。默認(rèn)值為None,表示使用默認(rèn)的顏色循環(huán)。如果要自定義顏色,可以傳遞一個(gè)與 x 長(zhǎng)度相同的數(shù)組,其中包含各個(gè)部分的顏色。

  • autopct : (可選參數(shù)) 這是一個(gè)字符串或函數(shù),用于顯示各個(gè)部分所占的百分比。默認(rèn)值為None,表示不顯示百分比。如果傳遞一個(gè)字符串,比如 '%1.1f%%' ,將顯示小數(shù)點(diǎn)后一位的百分比。如果傳遞一個(gè)函數(shù),該函數(shù)將接收一個(gè)數(shù)值作為參數(shù),并返回一個(gè)字符串用于顯示百分比。

  • shadow : (可選參數(shù)) 這是一個(gè)布爾值,用于指定是否在餅圖下方添加陰影。默認(rèn)值為False,表示不添加陰影。

  • startangle : (可選參數(shù)) 這是一個(gè)標(biāo)量,用于指定餅圖的起始角度。默認(rèn)值為0,表示從0度角開(kāi)始繪制餅圖,逆時(shí)針?lè)较颉?/p>

  • **kwargs : (可選參數(shù)) 這是一些可選的關(guān)鍵字參數(shù),用于配置餅圖的其他屬性,比如邊界線(xiàn)寬度、邊界線(xiàn)顏色等。

一旦調(diào)用了 plt.pie() 來(lái)繪制餅圖,你可以使用 plt.axis('equal') 來(lái)保證餅圖是圓形的,使用 plt.legend() 來(lái)顯示圖例。

data = [10, 15, 30, 20]
plt.pie(data,explode = [0.1,0.1,0.1,0.1],shadow=True)
plt.show()

1.1.5 直方圖

直方圖是概率分布的圖形表示。事實(shí)上,直方圖只是一種特殊的條形圖。我們可以很容易地使用  Matplotlib  的條形圖函數(shù),并進(jìn)行一些統(tǒng)計(jì)運(yùn)算來(lái)生成直方圖。但是,鑒于直方圖的使用頻率非常高,因此  Matplotlib  提供了一個(gè)更加方便的函數(shù)—— plt.hist() 。  plt.hist()  函數(shù)的作用是:獲取一系列值作為輸入。值的范圍將被劃分為大小相等的范圍(默認(rèn)情況下數(shù)量為  10 ),然后生成條形圖,一個(gè)范圍對(duì)應(yīng)一個(gè)條柱,一個(gè)條柱的高度是相應(yīng)范圍內(nèi)中的值的數(shù)量,條柱的數(shù)量由可選參數(shù)  bins 確定。

使用 plt.hist() 的一般語(yǔ)法如下:

pythonCopy code
plt.hist(x, bins=None, range=None, density=False, cumulative=False, color=None, edgecolor=None, **kwargs)

其中,參數(shù)的意義如下:

  • x : 這是一個(gè)1維數(shù)組或列表,表示要繪制直方圖的數(shù)據(jù)。

  • bins : (可選參數(shù)) 這是一個(gè)整數(shù)或指定分 bin 的數(shù)組,用于控制直方圖的箱子(bin)數(shù)量和位置。默認(rèn)值為None,表示使用自動(dòng)選擇的箱子數(shù)量??梢詡鬟f一個(gè)整數(shù)值來(lái)指定箱子數(shù)量,或者傳遞一個(gè)數(shù)組來(lái)指定具體的箱子邊界。

  • range : (可選參數(shù)) 這是一個(gè)元組或列表,用于指定直方圖的數(shù)據(jù)范圍。默認(rèn)值為None,表示使用整個(gè)數(shù)據(jù)的范圍??梢詡鬟f一個(gè)元組或列表,如 (min_value, max_value) ,來(lái)限制直方圖顯示的數(shù)據(jù)范圍。

  • density : (可選參數(shù)) 這是一個(gè)布爾值,用于指定是否對(duì)直方圖進(jìn)行標(biāo)準(zhǔn)化。默認(rèn)值為False,表示直方圖顯示的是原始數(shù)據(jù)的頻數(shù)。如果設(shè)置為T(mén)rue,直方圖將顯示相對(duì)頻率,使得直方圖的面積總和為1。

  • cumulative : (可選參數(shù)) 這是一個(gè)布爾值,用于指定是否繪制累積直方圖。默認(rèn)值為False,表示繪制原始直方圖。如果設(shè)置為T(mén)rue,將繪制累積直方圖,即顯示每個(gè)箱子內(nèi)數(shù)據(jù)的累積數(shù)量。

  • color : (可選參數(shù)) 這是一個(gè)字符串或顏色代碼,用于指定直方圖的填充顏色。

  • edgecolor : (可選參數(shù)) 這是一個(gè)字符串或顏色代碼,用于指定直方圖的邊界線(xiàn)顏色。

  • **kwargs : (可選參數(shù)) 這是一些可選的關(guān)鍵字參數(shù),用于配置直方圖的其他屬性,比如透明度、標(biāo)簽等。

一旦調(diào)用了 plt.hist() 來(lái)繪制直方圖,你可以使用 plt.xlabel() 、 plt.ylabel() plt.title() 等方法來(lái)添加坐標(biāo)軸標(biāo)簽和圖標(biāo)題,使用 plt.legend() 來(lái)顯示圖例,

data1 = np.random.rand(1024)
plt.hist(data1, bins=10, alpha=0.6, label='Data 1', histtype='bar', rwidth=0.8)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram with Gap between Bars')
plt.legend()
plt.show()

如果要在繪制多個(gè)直方圖時(shí),讓它們之間有間距,可以使用 plt.hist() 方法的 histtype 參數(shù)。 histtype 參數(shù)用于指定直方圖的類(lèi)型,包括'bar'(默認(rèn))、'barstacked'和'step'等。

對(duì)于繪制多個(gè)直方圖,并希望它們之間有間距,可以選擇使用'bar'或'barstacked'類(lèi)型,并將 alpha 參數(shù)設(shè)置為小于1的值,從而使得直方圖之間透明,從而呈現(xiàn)出間距的效果。

在上面的代碼中,使用了 histtype='bar' alpha=0.6 參數(shù)來(lái)設(shè)置直方圖類(lèi)型為'bar'并使得直方圖之間有間距。同時(shí),我們還設(shè)置了 rwidth=0.8 來(lái)控制直方圖的寬度,以使得直方圖在水平方向上有間距。

1.1.6 箱形圖

箱線(xiàn)圖將會(huì)顯示數(shù)據(jù)的五數(shù)概括:最小值、下四分位數(shù)、中位數(shù)、上四分位數(shù)、最大值,以及可能的異常值。

使用 plt.boxplot(data) 的一般語(yǔ)法如下:

plt.boxplot(data, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, **kwargs)

其中,參數(shù)的意義如下:

  • data : 這是一個(gè)列表、數(shù)組或多個(gè)列表/數(shù)組的組合,表示要繪制箱線(xiàn)圖的數(shù)據(jù)集??梢詡鬟f一個(gè)列表或數(shù)組,也可以傳遞多個(gè)列表或數(shù)組組成的組合,用于在同一個(gè)圖中繪制多個(gè)箱線(xiàn)圖。

  • notch : (可選參數(shù)) 這是一個(gè)布爾值,用于指定是否在箱線(xiàn)圖中繪制缺口。默認(rèn)值為None,表示不繪制缺口。如果設(shè)置為T(mén)rue,箱線(xiàn)圖將帶有缺口,有助于顯示數(shù)據(jù)集的置信區(qū)間。

  • sym : (可選參數(shù)) 這是一個(gè)字符串,用于指定異常值的表示方式。默認(rèn)值為None,表示使用'+'表示異常值??梢詡鬟f其他符號(hào)或空字符串來(lái)自定義異常值的表示。

  • vert : (可選參數(shù)) 這是一個(gè)布爾值,用于指定箱線(xiàn)圖的方向。默認(rèn)值為None,表示繪制垂直箱線(xiàn)圖。如果設(shè)置為False,將繪制水平箱線(xiàn)圖。

  • whis : (可選參數(shù)) 這是一個(gè)標(biāo)量或元組,用于指定箱線(xiàn)圖中須的長(zhǎng)度。默認(rèn)值為None,表示使用默認(rèn)值1.5??梢詡鬟f一個(gè)標(biāo)量值或一個(gè)元組 (lower, upper) ,用于自定義須的長(zhǎng)度。

  • positions : (可選參數(shù)) 這是一個(gè)標(biāo)量或列表,用于指定箱線(xiàn)圖的位置。默認(rèn)值為None,表示每個(gè)數(shù)據(jù)集在x軸上均勻分布??梢詡鬟f一個(gè)標(biāo)量值或一個(gè)與數(shù)據(jù)集數(shù)量相同的列表,用于自定義箱線(xiàn)圖的位置。

  • widths : (可選參數(shù)) 這是一個(gè)標(biāo)量或列表,用于指定箱線(xiàn)圖的寬度。默認(rèn)值為None,表示使用默認(rèn)寬度??梢詡鬟f一個(gè)標(biāo)量值或一個(gè)與數(shù)據(jù)集數(shù)量相同的列表,用于自定義箱線(xiàn)圖的寬度。

  • patch_artist : (可選參數(shù)) 這是一個(gè)布爾值,用于指定是否對(duì)箱線(xiàn)圖的盒體使用填充顏色。默認(rèn)值為None,表示不使用填充顏色。如果設(shè)置為T(mén)rue,箱線(xiàn)圖的盒體將被填充,可以通過(guò) boxprops 參數(shù)指定填充顏色和其他屬性。

  • **kwargs : (可選參數(shù)) 這是一些可選的關(guān)鍵字參數(shù),用于配置箱線(xiàn)圖的其他屬性,比如線(xiàn)條顏色、線(xiàn)條樣式等。

一旦調(diào)用了 plt.boxplot(data) 來(lái)繪制箱線(xiàn)圖,你可以使用 plt.xlabel() 、 plt.ylabel() plt.title() 等方法來(lái)添加坐標(biāo)軸標(biāo)簽和圖標(biāo)題,使用 plt.xticks() plt.yticks() 來(lái)自定義刻度標(biāo)簽

示例:

data = np.random.randn(100)
# 繪制箱線(xiàn)圖
plt.boxplot(data)
# 添加標(biāo)題和標(biāo)簽
plt.title('Box Plot Example')
plt.ylabel('Value')
# 顯示箱線(xiàn)圖
plt.show()

  • 圖中黃線(xiàn)是分布的中位數(shù)。

  • 方形箱框包括從下四分位數(shù)Q1到上四分位數(shù)Q3的50%的數(shù)據(jù)。

  • 下盒須的下四分位延伸到1.5 (Q3-Q1)。

  • 上盒須從上四分位延伸至1.5 (Q3-Q1)。

  • 離盒須較遠(yuǎn)的數(shù)值用圓圈標(biāo)記。

要在單個(gè)圖形中繪制多個(gè)箱形圖,對(duì)每個(gè)箱形圖調(diào)用一次 plt.boxplot() 是不可行。它會(huì)將所有箱形圖畫(huà)在一起,形成一個(gè)混亂的、不可讀的圖形。如果想要到達(dá)符合要求的效果,只需在一次調(diào)用 plt.boxplot() 中,同時(shí)繪制多個(gè)箱形圖即可,如下所示:

data = np.random.randn(200, 6)
#繪制圖形
plt.boxplot(data)
# 添加標(biāo)題和標(biāo)簽
plt.title('Box Plot Example')
plt.ylabel('Value')
# 顯示箱線(xiàn)圖
plt.show()

1.2 3D圖形繪制

導(dǎo)入:

from mpl_toolkits.mplot3d import Axes3D

1.2.1 3D散點(diǎn)圖

3D  散點(diǎn)圖的繪制方式與  2D  散點(diǎn)圖基本相同,示例如下:

a, b, c = 10., 28., 8. / 3.
def lorenz_map(x, dt = 1e-2):
x_dt = np.array([a * (x[1] - x[0]), x[0] * (b - x[2]) - x[1], x[0] * x[1] - c * x[2]])
return x + dt * x_dt
points = np.zeros((2000, 3))
x = np.array([.1, .0, .0])
for i in range(points.shape[0]):
points[i], x = x, lorenz_map(x)
# Plotting
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d') ?# 使用add_subplot()方法創(chuàng)建三維坐標(biāo)軸
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
ax.set_title('Lorenz Attractor a=%0.2f b=%0.2f c=%0.2f' % (a, b, c))
ax.scatter(points[:, 0], points[:, 1],points[:, 2], zdir = 'z', c = 'c')
plt.show()

在Matplotlib中, scatter() 方法用于在三維坐標(biāo)軸上繪制散點(diǎn)圖。它可以將一系列的數(shù)據(jù)點(diǎn)以散點(diǎn)的形式表示在三維空間中。

scatter() 方法的語(yǔ)法如下:

scatter(x, y, z, c=None, s=None, marker=None, cmap=None, **kwargs)

其中,參數(shù)的意義如下:

  • x : 這是一個(gè)1維數(shù)組或列表,表示散點(diǎn)圖在X軸上的位置。

  • y : 這是一個(gè)1維數(shù)組或列表,表示散點(diǎn)圖在Y軸上的位置。

  • z : 這是一個(gè)1維數(shù)組或列表,表示散點(diǎn)圖在Z軸上的位置,即垂直于XY平面的位置。

  • c : (可選參數(shù)) 這是一個(gè)1維數(shù)組或列表,用于指定每個(gè)散點(diǎn)的顏色。默認(rèn)值為None,表示使用默認(rèn)的顏色映射。你可以傳遞一個(gè)與 x 、 y z 長(zhǎng)度相同的數(shù)組,其中每個(gè)元素表示對(duì)應(yīng)散點(diǎn)的顏色。

  • s : (可選參數(shù)) 這是一個(gè)標(biāo)量或1維數(shù)組或列表,用于指定散點(diǎn)的大小。默認(rèn)值為None,表示使用默認(rèn)的點(diǎn)大小。如果傳遞一個(gè)標(biāo)量值,所有散點(diǎn)的大小將相同。如果傳遞一個(gè)與 x 、 y z 長(zhǎng)度相同的數(shù)組,每個(gè)元素表示對(duì)應(yīng)散點(diǎn)的大小。

  • marker : (可選參數(shù)) 這是一個(gè)字符串,用于指定散點(diǎn)的標(biāo)記類(lèi)型。默認(rèn)值為None,表示使用圓圈標(biāo)記??梢詡鬟f其他標(biāo)記類(lèi)型,如's', 'o', '^'等。

  • cmap : (可選參數(shù)) 這是一個(gè)Colormap對(duì)象或字符串,用于指定顏色映射。默認(rèn)值為None,表示使用默認(rèn)的顏色映射。你可以傳遞一個(gè)Colormap對(duì)象,或者使用字符串指定常見(jiàn)的顏色映射,如'viridis'、'plasma'、'jet'等。

  • zdir scatter() 方法中的一個(gè)可選參數(shù),用于指定在三維坐標(biāo)軸上散點(diǎn)的投影方向。它用于控制散點(diǎn)在三維空間中的展示方式。

    scatter() 方法中, zdir 可以取三個(gè)值:'x'、'y'和'z'。這些值分別表示在X軸、Y軸和Z軸上展示散點(diǎn)的投影。

    當(dāng) zdir 設(shè)置為'x'時(shí),散點(diǎn)在XY平面上的投影將在X軸上展示。 當(dāng) zdir 設(shè)置為'y'時(shí),散點(diǎn)在XZ平面上的投影將在Y軸上展示。 當(dāng) zdir 設(shè)置為'z'時(shí),散點(diǎn)在XY平面上的投影將在Z軸上展示。

    默認(rèn)情況下, zdir 的值為None,此時(shí)散點(diǎn)將在XY平面上展示,而不會(huì)在X、Y或Z軸上產(chǎn)生投影。

  • **kwargs : (可選參數(shù)) 這是一些可選的關(guān)鍵字參數(shù),用于配置散點(diǎn)圖的其他屬性,比如透明度、邊緣顏色等。

scatter() 方法可以在一個(gè)三維坐標(biāo)軸對(duì)象上調(diào)用,通過(guò) ax.scatter() 的形式來(lái)繪制三維散點(diǎn)圖。在調(diào)用 scatter() 時(shí),將數(shù)據(jù)傳遞給 x 、 y z 參數(shù),然后可以使用 c s 參數(shù)來(lái)指定顏色和大小, marker 參數(shù)來(lái)指定標(biāo)記類(lèi)型, cmap 參數(shù)來(lái)指定顏色映射等。

繪制3D圖形的步驟:

1、首先需要導(dǎo)入  Matplotlib  的三維擴(kuò)展  Axes3D

from mpl_toolkits.mplot3d import Axes3D

2、對(duì)于三維繪圖,需要?jiǎng)?chuàng)建一個(gè)  Figure  實(shí)例并附加一個(gè)  Axes3D  實(shí)例:

fig = plt.figure()
ax = fig.gca(projection='3d')

gca方法已經(jīng)不能使用了,可以使用add_subplot方法:

ax = fig.add_subplot(111, projection='3d') ?# 使用add_subplot()方法創(chuàng)建三維坐標(biāo)軸

3、然后帶入相應(yīng)的方法即可,這里帶入了scatter繪制散點(diǎn)圖:

ax.scatter(points[:, 0], points[:, 1],points[:, 2], zdir = 'z', c = 'c')

1.2.2 3D曲線(xiàn)圖

與在  3D  空間中繪制散點(diǎn)圖類(lèi)似,繪制  3D  曲線(xiàn)圖同樣需要設(shè)置一個(gè)  Axes3D  實(shí)例,然后調(diào)用其  plot()  方法:

a, b, c = 10., 28., 8. / 3.
def lorenz_map(x, dt = 1e-2):
x_dt = np.array([a * (x[1] - x[0]), x[0] * (b - x[2]) - x[1], x[0] * x[1] - c * x[2]])
return x + dt * x_dt
points = np.zeros((8000, 3))
x = np.array([.1, .0, .0])
for i in range(points.shape[0]):
points[i], x = x, lorenz_map(x)
# Plotting
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
ax.set_title('Lorenz Attractor a=%0.2f b=%0.2f c=%0.2f' % (a, b, c))
ax.plot(points[:, 0], points[:, 1], points[:, 2], c = 'c')
plt.show()

1.2.3 3D標(biāo)量場(chǎng)

3D  繪圖方式類(lèi)似與相應(yīng)的  2D  繪圖方式,但也有許多特有的三維繪圖功能,例如將二維標(biāo)量場(chǎng)繪制為  3D  曲面, plot_surface()  方法使用 x、 y和 z 三個(gè)序列將標(biāo)量場(chǎng)顯示為三維曲面(展示一個(gè)二維量在三維中的形狀):

x = np.linspace(-3, 3, 256)
y = np.linspace(-3, 3, 256)
x_grid, y_grid = np.meshgrid(x, y) #使用`np.meshgrid()`方法將一維數(shù)組`x`和`y`轉(zhuǎn)換為二維數(shù)組,得到`x_grid`和`y_grid`,用于表示XY平面上的點(diǎn)坐標(biāo)網(wǎng)格。
print(x_grid)
z = np.sinc(np.sqrt(x_grid ** 2 + y_grid ** 2))
fig = plt.figure()
ax = fig.add_subplot(projection = '3d') #創(chuàng)建一個(gè)三維坐標(biāo)軸對(duì)象。
ax.plot_surface(x_grid, y_grid, z, cmap=cm.viridis) #x_grid和y_grid表示XY平面上的點(diǎn)坐標(biāo)網(wǎng)格,z表示每個(gè)點(diǎn)上的函數(shù)值。cmap=cm.viridis指定使用'viridis'顏色映射,用于在三維圖上表示高度的顏色。
plt.show()

plot_surface() 的用法如下:

pythonCopy code
plot_surface(X, Y, Z, cmap=None, rstride=1, cstride=1, alpha=1.0, antialiased=False, **kwargs)

其中,參數(shù)的意義如下:

  • X : 二維數(shù)組,表示數(shù)據(jù)在X軸上的坐標(biāo)。它的形狀應(yīng)該與 Z 的形狀相同。

  • Y : 二維數(shù)組,表示數(shù)據(jù)在Y軸上的坐標(biāo)。它的形狀應(yīng)該與 Z 的形狀相同。

  • Z : 二維數(shù)組,表示數(shù)據(jù)在三維空間中的高度或數(shù)值。它的形狀應(yīng)該與 X Y 的形狀相同。

  • cmap : Colormap對(duì)象或字符串,用于指定顏色映射。默認(rèn)值為None,表示使用默認(rèn)的顏色映射。你可以傳遞一個(gè)Colormap對(duì)象,或者使用字符串指定常見(jiàn)的顏色映射,如'viridis'、'plasma'、'jet'等。

  • rstride : 整數(shù),表示在Z方向上采樣的步長(zhǎng)。默認(rèn)值為1,表示不進(jìn)行采樣。較大的值會(huì)導(dǎo)致更少的繪制點(diǎn),從而加快繪制速度,但可能會(huì)影響圖像的精細(xì)程度。

  • cstride : 整數(shù),表示在XY平面上采樣的步長(zhǎng)。默認(rèn)值為1,表示不進(jìn)行采樣。較大的值會(huì)導(dǎo)致更少的繪制點(diǎn),從而加快繪制速度,但可能會(huì)影響圖像的精細(xì)程度。

  • alpha : 浮點(diǎn)數(shù),表示表面的透明度。默認(rèn)值為1.0,表示不透明。取值范圍為0.0到1.0,其中0.0表示完全透明,1.0表示完全不透明。

  • antialiased : 布爾值,表示是否使用抗鋸齒。默認(rèn)值為False,表示不使用抗鋸齒。如果設(shè)置為T(mén)rue,圖像會(huì)更加平滑,但可能會(huì)增加繪制時(shí)間。

  • 色。

    在繪制三維表面圖時(shí),表面由許多小的三角形或多邊形組成,這些小形狀之間的邊緣線(xiàn)通常是默認(rèn)顏色。通過(guò)設(shè)置 edgecolor 參數(shù),你可以控制這些邊緣線(xiàn)的顏色,使其與表面的顏色不同,從而增加圖形的可視化效果。

    edgecolor 可以接受一個(gè)顏色值的字符串或RGB元組。常用的顏色值字符串如下:

    • 'b':藍(lán)色

    • 'g':綠色

    • 'r':紅色

    • 'c':青色(藍(lán)綠色)

    • 'm':洋紅(品紅色)

    • 'y':黃色

    • 'k':黑色

    • 'w':白色

    你也可以傳遞一個(gè)RGB元組,例如 (0.1, 0.2, 0.3) ,表示RGB顏色分量的值在0到1之間。這樣,你可以自定義邊緣線(xiàn)的顏色。

  • **kwargs : 可選的關(guān)鍵字參數(shù),用于配置表面圖的其他屬性,比如線(xiàn)條顏色、線(xiàn)條樣式等。

X 、 Y Z 分別代表了數(shù)據(jù)在三維空間中的網(wǎng)格坐標(biāo)和高度,而 cmap 參數(shù)可以用來(lái)調(diào)整表面的顏色。 rstride cstride 參數(shù)用于控制在Z方向和XY平面上的采樣步長(zhǎng),可以用于優(yōu)化繪制速度和圖像精細(xì)度。 alpha 參數(shù)控制表面的透明度, antialiased 參數(shù)用于指定是否使用抗鋸齒。

如果不希望看到三維曲面上顯示的曲線(xiàn)色彩,可以使用  plot_surface()  的附加可選參數(shù):

ax.plot_surface(x_grid, y_grid, z, cmap=cm.viridis, linewidth=0, antialiased=False)

示例:

x = np.linspace(-3, 3, 256)
y = np.linspace(-3, 3, 256)
x_grid, y_grid = np.meshgrid(x, y) #使用`np.meshgrid()`方法將一維數(shù)組`x`和`y`轉(zhuǎn)換為二維數(shù)組,得到`x_grid`和`y_grid`,用于表示XY平面上的點(diǎn)坐標(biāo)網(wǎng)格。
z = np.sinc(np.sqrt(x_grid ** 2 + y_grid ** 2))
fig = plt.figure()
ax = fig.add_subplot(projection = '3d') #創(chuàng)建一個(gè)三維坐標(biāo)軸對(duì)象。
ax.plot_surface(x_grid, y_grid, z, cmap=cm.viridis, linewidth=0, antialiased=False) #x_grid和y_grid表示XY平面上的點(diǎn)坐標(biāo)網(wǎng)格,z表示每個(gè)點(diǎn)上的函數(shù)值。cmap=cm.viridis指定使用'viridis'顏色映射,用于在三維圖上表示高度的顏色。
plt.show()

可以?xún)H保持曲線(xiàn)色彩,而曲面不使用其他顏色,這也可以通過(guò)  plot_surface()  的可選參數(shù)來(lái)完成:

x = np.linspace(-3, 3, 256)
y = np.linspace(-3, 3, 256)
x_grid, y_grid = np.meshgrid(x, y) #使用`np.meshgrid()`方法將一維數(shù)組`x`和`y`轉(zhuǎn)換為二維數(shù)組,得到`x_grid`和`y_grid`,用于表示XY平面上的點(diǎn)坐標(biāo)網(wǎng)格。
z = np.sinc(np.sqrt(x_grid ** 2 + y_grid ** 2))
fig = plt.figure()
ax = fig.add_subplot(projection = '3d') #創(chuàng)建一個(gè)三維坐標(biāo)軸對(duì)象。
ax.plot_surface(x_grid, y_grid, z, edgecolor='b',color='w') #x_grid和y_grid表示XY平面上的點(diǎn)坐標(biāo)網(wǎng)格,z表示每個(gè)點(diǎn)上的函數(shù)值。cmap=cm.viridis指定使用'viridis'顏色映射,用于在三維圖上表示高度的顏色。
plt.show()

如果希望消除曲面,而僅使用線(xiàn)框進(jìn)行繪制,可以使用  plot_wireframe()  函數(shù), plot_wireframe()  參數(shù)與  plot_surface()  相同,使用兩個(gè)可選參數(shù)  rstride  和  cstride  用于令  Matplotlib  跳過(guò) x 和 y軸上指定數(shù)量的坐標(biāo),用于減少曲線(xiàn)的密度:

ax.plot_wireframe(x_grid, y_grid, z, cstride=10, rstride=10,color='c')

示例:

plot_wireframe() 的用法如下:

plot_wireframe(X, Y, Z, rstride=1, cstride=1, color=None, linewidth=1, antialiased=False, **kwargs)

其中,參數(shù)的意義如下:

  • X : 二維數(shù)組,表示數(shù)據(jù)在X軸上的坐標(biāo)。它的形狀應(yīng)該與 Z 的形狀相同。

  • Y : 二維數(shù)組,表示數(shù)據(jù)在Y軸上的坐標(biāo)。它的形狀應(yīng)該與 Z 的形狀相同。

  • Z : 二維數(shù)組,表示數(shù)據(jù)在三維空間中的高度或數(shù)值。它的形狀應(yīng)該與 X Y 的形狀相同。

  • rstride : 整數(shù),表示在Z方向上采樣的步長(zhǎng)。默認(rèn)值為1,表示不進(jìn)行采樣。較大的值會(huì)導(dǎo)致更少的繪制點(diǎn),從而加快繪制速度,但可能會(huì)影響圖像的精細(xì)程度。

  • cstride : 整數(shù),表示在XY平面上采樣的步長(zhǎng)。默認(rèn)值為1,表示不進(jìn)行采樣。較大的值會(huì)導(dǎo)致更少的繪制點(diǎn),從而加快繪制速度,但可能會(huì)影響圖像的精細(xì)程度。

  • color : 顏色或顏色序列,用于指定線(xiàn)框的顏色。默認(rèn)值為None,表示使用默認(rèn)的顏色。

  • linewidth : 浮點(diǎn)數(shù),表示線(xiàn)框的寬度。默認(rèn)值為1。

  • antialiased : 布爾值,表示是否使用抗鋸齒。默認(rèn)值為False,表示不使用抗鋸齒。如果設(shè)置為T(mén)rue,線(xiàn)框會(huì)更加平滑,但可能會(huì)增加繪制時(shí)間。

  • **kwargs : 可選的關(guān)鍵字參數(shù),用于配置線(xiàn)框圖的其他屬性,比如線(xiàn)條樣式等。

X 、 Y Z 分別代表了數(shù)據(jù)在三維空間中的網(wǎng)格坐標(biāo)和高度, rstride cstride 參數(shù)用于控制在Z方向和XY平面上的采樣步長(zhǎng),可以用于優(yōu)化繪制速度和圖像精細(xì)度。 color 參數(shù)用于指定線(xiàn)框的顏色, linewidth 參數(shù)用于調(diào)整線(xiàn)框的寬度, antialiased 參數(shù)用于指定是否使用抗鋸齒。

1.2.4 繪制3D曲面

Matplotlib  也能夠使用更通用的方式繪制三維曲面:

angle = np.linspace(0, 2 * np.pi, 32)
theta, phi = np.meshgrid(angle, angle)
r, r_w = .25, 1.
x = (r_w + r * np.cos(phi)) * np.cos(theta)
y = (r_w + r * np.cos(phi)) * np.sin(theta)
z = r * np.sin(phi)
# Display the mesh
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
ax.set_xlim3d(-1, 1)
ax.set_ylim3d(-1, 1)
ax.set_zlim3d(-1, 1)
ax.plot_surface(x, y, z, color = 'c', edgecolor='m', rstride = 2, cstride = 2)
plt.show()

同樣可以使用  plot_wireframe()  替換對(duì)  plot_surface()  的調(diào)用,以便獲得圓環(huán)的線(xiàn)框視圖:

angle = np.linspace(0, 2 * np.pi, 32)
theta, phi = np.meshgrid(angle, angle)
r, r_w = .25, 1.
x = (r_w + r * np.cos(phi)) * np.cos(theta)
y = (r_w + r * np.cos(phi)) * np.sin(theta)
z = r * np.sin(phi)
# Display the mesh
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
ax.set_xlim3d(-1, 1)
ax.set_ylim3d(-1, 1)
ax.set_zlim3d(-1, 1)
ax.plot_wireframe(x, y, z, edgecolor='c', rstride = 2, cstride = 1)
plt.show()

1.2.5 在3D坐標(biāo)中繪制2D圖形

Axes3D  實(shí)例同樣支持常用的二維渲染命令,如  plot()

ax.plot(x, u, zs=3, zdir='y', lw = 2, color = 'm')

這段代碼使用 ax.plot() 方法在三維坐標(biāo)軸中繪制一條線(xiàn)。

  • x : 一維數(shù)組或列表,表示數(shù)據(jù)點(diǎn)在X軸上的位置。

  • u : 一維數(shù)組或列表,表示數(shù)據(jù)點(diǎn)在Y軸上的位置。

  • zs : 數(shù)字或一維數(shù)組,表示數(shù)據(jù)點(diǎn)在Z軸上的位置。在這個(gè)例子中, zs=3 表示數(shù)據(jù)點(diǎn)在Z軸上的位置都是3,也就是說(shuō)這條線(xiàn)的所有點(diǎn)都在Z=3這個(gè)平面上。如果傳遞一個(gè)一維數(shù)組,表示每個(gè)數(shù)據(jù)點(diǎn)在Z軸上的位置。

  • zdir : 字符串,表示投影方向。這個(gè)參數(shù)用于控制這條線(xiàn)在三維空間中的展示方向。在這個(gè)例子中, zdir='y' 表示這條線(xiàn)在XY平面上的投影將在Y軸上展示。

  • lw : (可選參數(shù)) 數(shù)字,表示線(xiàn)條的寬度。默認(rèn)值為2。

  • color : (可選參數(shù)) 字符串,表示線(xiàn)條的顏色。默認(rèn)值為'm',表示線(xiàn)條顏色為洋紅色(品紅色)。你可以使用顏色字符串,如'red'、'blue'、'green'等,也可以使用縮寫(xiě)顏色字符串,如'r'、'b'、'g'等。

Axes3D 實(shí)例對(duì)  plot()  的調(diào)用有兩個(gè)新的可選參數(shù):  zdir  :用于決定在哪個(gè)平面上繪制2D繪圖,可選值包括  x 、 y  或  z ;  zs  :用于決定平面的偏移。 因此,要將二維圖形嵌入到三維圖形中,只需將二維原語(yǔ)用于  Axes3D  實(shí)例,同時(shí)使用可選參數(shù), zdir  和  zs ,來(lái)放置所需渲染圖形平面。

示例:

x = np.linspace(-3, 3, 256)
y = np.linspace(-3, 3, 256)
x_grid, y_grid = np.meshgrid(x, y)
z = np.exp(-(x_grid ** 2 + y_grid ** 2))
u = np.exp(-(x ** 2))
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
ax.set_zlim3d(0, 3)#ax.set_zlim3d()是Matplotlib中用于設(shè)置三維坐標(biāo)軸的Z軸范圍(限制)的方法。它用于限定Z軸的取值范圍,從而控制繪圖中Z軸顯示的范圍。set_zlim3d(zmin, zmax)
ax.plot(x, u, zs=3, zdir='y', lw = 2, color = 'm')
ax.plot(x, u, zs=-3, zdir='x', lw = 2., color = 'c')
ax.plot_surface(x_grid, y_grid, z, color = 'b')
plt.show()

除此之外,可以在 3D  空間中堆疊  2D  條形圖:

alpha = 1. / np.linspace(1, 8, 5)
t = np.linspace(0, 5, 16)
t_grid, a_grid = np.meshgrid(t, alpha)
data = np.exp(-t_grid * a_grid)
# Plotting
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
cmap = cm.ScalarMappable(col.Normalize(0, len(alpha)), cm.viridis) ?#顏色映射
for i, row in enumerate(data):
ax.bar(4 * t, row, zs=i, zdir='y', alpha=0.8, color=cmap.to_rgba(i))
plt.show()
  • col.Normalize(0, len(alpha)) : 這是創(chuàng)建一個(gè)歸一化(Normalize)對(duì)象的操作。 col matplotlib.colors 模塊的別名,用于訪(fǎng)問(wèn)顏色相關(guān)的功能。 Normalize(0, len(alpha)) 表示將數(shù)據(jù)映射到0到 len(alpha) 之間的范圍。這個(gè)操作通常用于將數(shù)據(jù)規(guī)范化到特定范圍,以便后續(xù)的顏色映射。

  • cm.viridis : 這是指定使用的顏色映射。 cm matplotlib.cm 模塊的別名,用于訪(fǎng)問(wèn)顏色映射功能。 viridis 是一種預(yù)定義的顏色映射,它包含一系列顏色,從低值(例如0)到高值(例如1)依次變化,用于在繪圖中表示數(shù)據(jù)的高低或其他屬性。

  • cm.ScalarMappable(col.Normalize(0, len(alpha)), cm.viridis) : 這個(gè)操作將前面創(chuàng)建的歸一化對(duì)象和顏色映射對(duì)象組合在一起,生成一個(gè)可映射到顏色的標(biāo)量映射對(duì)象。這個(gè)對(duì)象在繪圖中用于將數(shù)值映射到對(duì)應(yīng)的顏色.

  • ax.bar(4 * t, row, zs=i, zdir='y', alpha=0.8, color=cmap.to_rgba(i)) : 在三維坐標(biāo)軸中繪制一個(gè)條形, 4 * t 表示條形的X坐標(biāo), row 表示條形的高度, zs=i 表示條形的Z坐標(biāo), zdir='y' 表示條形在XY平面上的投影將在Y軸上展示, alpha=0.8 表示條形的透明度為0.8, color=cmap.to_rgba(i) 表示條形的顏色根據(jù) i 通過(guò)顏色映射對(duì)象 cmap 獲取

1.2.6 3D柱形圖

3D  柱體以網(wǎng)格布局定位, bar3d()  方法接受六個(gè)必需參數(shù)作為輸入, bar3d() 是Matplotlib中用于繪制三維條形圖的方法。它可以在三維坐標(biāo)軸中繪制一個(gè)或多個(gè)條形,用于可視化三維數(shù)據(jù)。

bar3d() 的用法如下:

bar3d(x, y, z, dx, dy, dz, color='b', zsort='average', *args, **kwargs)

其中,參數(shù)的含義如下:

  • x : 一維數(shù)組或列表,表示每個(gè)條形的中心點(diǎn)在X軸上的位置。

  • y : 一維數(shù)組或列表,表示每個(gè)條形的中心點(diǎn)在Y軸上的位置。

  • z : 一維數(shù)組或列表,表示每個(gè)條形的中心點(diǎn)在Z軸上的位置,即條形的高度。

  • dx : 一維數(shù)組或列表,表示每個(gè)條形在X軸方向上的寬度。

  • dy : 一維數(shù)組或列表,表示每個(gè)條形在Y軸方向上的寬度。

  • dz : 一維數(shù)組或列表,表示每個(gè)條形在Z軸方向上的高度,即條形的厚度。

  • color : (可選參數(shù)) 字符串或顏色序列,表示條形的顏色。默認(rèn)值為藍(lán)色('b')。

  • zsort : (可選參數(shù)) 字符串,表示條形的繪制順序。默認(rèn)值為'average',表示按照Z(yǔ)軸坐標(biāo)的平均值對(duì)條形進(jìn)行排序。也可以選擇'min'表示按照Z(yǔ)軸坐標(biāo)的最小值排序,'max'表示按照Z(yǔ)軸坐標(biāo)的最大值排序,或者'none'表示不排序。

  • *args **kwargs : (可選參數(shù)) 這是一些額外的位置參數(shù)和關(guān)鍵字參數(shù),用于配置條形的其他屬性,比如線(xiàn)條顏色、線(xiàn)條樣式等。

通過(guò)傳遞 x 、 y z 的數(shù)據(jù),以及 dx dy dz 的寬度和高度數(shù)據(jù),你可以使用 bar3d() 方法繪制一個(gè)或多個(gè)三維條形。每個(gè)條形的中心點(diǎn)由 x y z 指定,寬度由 dx dy 指定,高度由 dz 指定。

color 參數(shù)用于設(shè)置條形的顏色,可以傳遞顏色字符串,如'red'、'blue'、'green'等,也可以使用縮寫(xiě)顏色字符串,如'r'、'b'、'g'等,或者使用顏色序列。

zsort 參數(shù)用于控制條形的繪制順序,可以按照Z(yǔ)軸坐標(biāo)的平均值、最小值或最大值對(duì)條形進(jìn)行排序,或者不排序。

示例:

alpha = np.linspace(1, 8, 5)
t = np.linspace(0, 5, 16)
t_grid, a_grid = np.meshgrid(t, alpha)
data = np.exp(-t_grid * (1. / a_grid))
# Plotting
fig = plt.figure()
ax = fig.add_subplot(projection = '3d')
xi = t_grid.flatten()
yi = a_grid.flatten()
zi = np.zeros(data.size)
dx = .30 * np.ones(data.size)
dy = .30 * np.ones(data.size)
dz = data.flatten()
ax.set_xlabel('T')
ax.set_ylabel('Alpha')
ax.bar3d(xi, yi, zi, dx, dy, dz, color = 'c')
plt.show()

二、matplotlib繪圖的風(fēng)格和樣式

2.1 matplotlib風(fēng)格

為了滿(mǎn)足不同的應(yīng)用需求, Matplotlib  中包含了  28  種不同的風(fēng)格,在進(jìn)行繪圖時(shí),可以根據(jù)需要選擇不同的繪圖風(fēng)格。使用以下代碼可以獲取  Matplotlib  中所有可用的風(fēng)格:

import matplotlib as mpl
from matplotlib import pyplot as plt
# 查看 Matplotlib 可用繪圖風(fēng)格
print(plt.style.available

使用  plt.style.use("style")  可以修改默認(rèn)的繪圖風(fēng)格,其中  style  為  Matplolib  中可用的風(fēng)格:

# 設(shè)置默認(rèn)繪圖風(fēng)格為 seaborn-darkgrid
plt.style.use("seaborn-darkgrid")
x = np.linspace(0, 2 * np.pi, 100)
y = np.cos(x)
plt.plot(x, y)
plt.show()

除此之外, Maplotlib  中還有一些非常有意思的風(fēng)格,例如手繪風(fēng)格:

# 啟用手繪風(fēng)格
plt.xkcd()
x = np.linspace(0, 2 * np.pi, 100)
y = np.cos(x)
plt.plot(x, y)
plt.show()

同樣還有手繪風(fēng)格的條形圖:

#啟用手繪風(fēng)格
plt.xkcd()
data = [[10., 20., 30., 20.],[40., 25., 53., 18.],[6., 22., 52., 19.]]
x = np.arange(4)
plt.bar(x + 0.00, data[0], color = 'b', width = 0.25)
plt.bar(x + 0.25, data[1], color = 'g', width = 0.25)
plt.bar(x + 0.50, data[2], color = 'r', width = 0.25)
plt.show()

2.2 自定義顏色

2.2.1 自定義顏色

Matplotlib  中有多種定義顏色的方法,常見(jiàn)的方法包括:

  • 三元組 ( Triplets ):顏色可以描述為一個(gè)實(shí)數(shù)三元組,即顏色的紅、藍(lán)、綠分量,其中每個(gè)分量在  [0,1]  區(qū)間內(nèi)。因此, (1.0, 0.0, 0.0)  表示純紅色,而  (1.0, 0.0, 1.0)  則表示粉色。

  • 四元組 ( Quadruplets ):它們前三個(gè)元素與三元組定義相同,第四個(gè)元素定義透明度值。此值也在  [0,1]  區(qū)間內(nèi)。將圖形渲染到圖片文件中時(shí),使用透明顏色可以使繪制圖形與背景進(jìn)行混合。

  • 預(yù)定義名稱(chēng): Matplotlib  將標(biāo)準(zhǔn)  HTML  顏色名稱(chēng)解釋為實(shí)際顏色。例如,字符串  red  即可表示為紅色。同時(shí)一些某些顏色的具有簡(jiǎn)潔的別名,如下表所示:

4、HTML顏色字符串:Matplotlib可以將HTML顏色字符串解釋為實(shí)際顏色。這些字符串被定義為#RRGGBB,其中RR、GG和BB` 分別是使用十六進(jìn)制編碼的紅色、綠色和藍(lán)色分量。

5、灰度字符串: Matplotlib  將浮點(diǎn)值的字符串表示形式解釋為灰度,例如  0.75  表示中淺灰色。

2.2.2 使用自定義顏色繪制曲線(xiàn)

通過(guò)設(shè)置  plt.plot()  函數(shù)的參數(shù)  color  (或等效的簡(jiǎn)寫(xiě)為  c ),可以設(shè)置曲線(xiàn)的顏色,示例:

def pdf(x, mu, sigma):
a = 1. / (sigma * np.sqrt(2. * np.pi))
b = -1. / (2. * sigma ** 2)
return a * np.exp(b * (x - mu) ** 2)
x = np.linspace(-6, 6, 1000)
for i in range(5):
samples = np.random.standard_normal(50)
mu, sigma = np.mean(samples), np.std(samples)
plt.plot(x, pdf(x, mu, sigma), color = str(.15*(i+1)))
plt.plot(x, pdf(x, 0., 1.), color = 'k')
plt.plot(x, pdf(x, 0.2, 1.), color = '#00ff00')
plt.plot(x, pdf(x, 0.4, 1.), color = (0.9,0.9,0.0))
plt.plot(x, pdf(x, 0.4, 1.), color = (0.9,0.9,0.0,0.8))
plt.show()

2.2.3 使用自定義顏色繪制散點(diǎn)圖

可以以同樣的方式像控制曲線(xiàn)圖一樣控制散點(diǎn)圖的顏色,有兩種可用的形式:

  • 為所有點(diǎn)使用相同的顏色 :所有點(diǎn)都將以相同的顏色顯示。

  • 為每個(gè)點(diǎn)定義不同的顏色:為每個(gè)點(diǎn)提供不同的顏色。

2.2.3.1 給所有點(diǎn)使用相同的顏色

用從二元高斯分布中提取的兩組點(diǎn)  y_1  和  y_2 ,每一組中點(diǎn)的顏色相同:

y_1 = np.random.standard_normal((150, 2)) #標(biāo)準(zhǔn)正太分布
y_1 += np.array((-1, -1)) # Center the distrib. at <-1, -1>
y_2 = np.random.standard_normal((150, 2))
y_2 += np.array((1, 1)) # Center the distrib. at <1, 1>
plt.scatter(y_1[:,0], y_1[:,1], color = 'c')
plt.scatter(y_2[:,0], y_2[:,1], color = 'b')
plt.show()

2.2.3.2 給每個(gè)點(diǎn)不同的顏色

需要為不同類(lèi)別的點(diǎn)使用不同的顏色進(jìn)行繪制,以觀察不同類(lèi)別間的差異情況。以Fisher’s iris數(shù)據(jù)集為例,其數(shù)據(jù)集中數(shù)據(jù)類(lèi)似如下所示:

5.0,3.3,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
4.0,5.2,9.5,9.3,Iris-virginica

數(shù)據(jù)集的每個(gè)點(diǎn)都存儲(chǔ)在以逗號(hào)分隔的列表中。最后一列給出每個(gè)點(diǎn)的標(biāo)簽(標(biāo)簽包含三類(lèi): Iris-virginica 、 Iris-versicolor  和  Iris-Vertosa )。在示例中,這些點(diǎn)的顏色將取決于它們的標(biāo)簽,如下所示:

label_set = (
b'Iris-setosa',
b'Iris-versicolor',
b'Iris-virginica',
)
def read_label(label):
return label_set.index(label)
data = np.loadtxt('data.data', delimiter = ',', converters = { 4 : read_label })
color_set = ('c', 'y', 'm')
color_list = [color_set[int(label)] for label in data[:,4]]
plt.scatter(data[:,0], data[:,1], color = color_list)
plt.show()

對(duì)于三種可能的標(biāo)簽,我們分別指定一種唯一的顏色,顏色在  color_set  中定義,標(biāo)簽在  label_set  中定義。 label_set  中的第  i  個(gè)標(biāo)簽與  color_set  中的第  i  個(gè)顏色相關(guān)聯(lián)。然后我們利用它們把標(biāo)簽列表轉(zhuǎn)換成顏色列表  color_list 。然后只需調(diào)用  plt.scatter()  一次即可顯示所有點(diǎn)及其顏色。

2.2.4 給散點(diǎn)圖的邊使用自定義顏色

與  color  參數(shù)控制點(diǎn)的顏色一樣,可以使用  edgecolor  參數(shù)控制數(shù)據(jù)點(diǎn)的邊的顏色,可以為每個(gè)點(diǎn)的邊設(shè)置相同的顏色:

data = np.random.standard_normal((100, 2))
plt.scatter(data[:,0], data[:,1], color = '1.0', edgecolor='r')
plt.show()

除了為每個(gè)點(diǎn)的邊設(shè)置相同的顏色外,也可以像在為每個(gè)點(diǎn)定義不同的顏色部分中介紹的一樣為每個(gè)點(diǎn)的邊設(shè)置不邊的顏色。

2.2.5 使用自定義顏色繪制條形圖

控制繪制條形圖使用的顏色與曲線(xiàn)圖和散點(diǎn)圖的工作原理相同,即通過(guò)可選參數(shù)  color

w_pop = np.array([5., 30., 45., 22.])
m_pop = np.array( [5., 25., 50., 20.])
x = np.arange(4)
plt.barh(x, w_pop, color='m')
plt.barh(x, -m_pop, color='c')
plt.show()

同樣,使用  plt.bar()  和  plt.barh()  函數(shù)自定義顏色繪制條形圖的工作方式與  plt.scatter()  完全相同,只需設(shè)置可選參數(shù)  color ,同時(shí)也可以參數(shù)  edgecolor  控制條形邊的顏色。`

示例:

values = np.random.randint(100, size = 50)
color_set = ('c', 'm', 'y', 'b')
color_list = [color_set[(len(color_set) * val) // 100] for val in values]
plt.bar(np.arange(len(values)), values, color = color_list)
plt.show()

2.2.6 使用自定義顏色繪制餅圖

自定義餅圖顏色的方法類(lèi)似于條形圖:

color_set = ('c', 'm', 'y', 'b')
values = np.random.rand(6)
plt.pie(values, colors = color_set)
plt.show()

餅圖接受使用  colors  參數(shù)(注意,此處是  colors ,而不是在  plt.plot()  中使用的  color  )的顏色列表。但是,如果顏色數(shù)少于輸入值列表中的元素?cái)?shù),那么  plt.pie()  將循環(huán)使用顏色列表中的顏色。在示例中,使用包含四種顏色的列表,為了給包含六個(gè)值的餅圖著色,其中有兩個(gè)顏色將使用兩次。

2.2.7 使用自定義顏色繪制箱型圖

values = np.random.randn(100)
b = plt.boxplot(values)
for name, line_list in b.items():
for line in line_list:
line.set_color('m')
plt.show()

2.2.8 使用色彩映射繪制散點(diǎn)圖

如果要在圖形中使用多種顏色,逐個(gè)定義每種顏色并不是最佳方案,色彩映射可以解決此問(wèn)題。色彩映射用一個(gè)變量對(duì)應(yīng)一個(gè)值(顏色)的連續(xù)函數(shù)定義顏色。 Matplotlib  提供了幾種常見(jiàn)的顏色映射;大多數(shù)是連續(xù)的顏色漸變。色彩映射在  matplotib.cm  模塊中定義,提供創(chuàng)建和使用色彩映射的函數(shù),它還提供了預(yù)定義的色彩映射選擇。 函數(shù)  plt.scatter()  接受  color  參數(shù)的值列表,當(dāng)提供  cmap  參數(shù)值時(shí),這些值將被解釋為色彩映射的索引:

n = 256
angle = np.linspace(0, 8 * 2 * np.pi, n)
radius = np.linspace(.5, 1., n)
x = radius * np.cos(angle)
y = radius * np.sin(angle)
plt.scatter(x, y, c = angle, cmap = cm.hsv)
plt.show()

2.2.9 使用色彩映射繪制條形圖

plt.scatter()  函數(shù)內(nèi)置了對(duì)色彩映射的支持,其他一些繪圖函數(shù)也內(nèi)置支持色彩映射。但是,有些函數(shù)(如  plt.bar()  )并未內(nèi)置對(duì)色彩映射的支持,在這種情況下, Matplotlib  可以從顏色映射顯式生成顏色:

使用matplotlb的color模塊:

values = np.random.randint(99, size = 50)
cmap = cm.ScalarMappable(col.Normalize(0, 99), cm.binary)
plt.bar(np.arange(len(values)), values, color = cmap.to_rgba(values))
plt.show()

首先創(chuàng)建色彩映射  cmap ,以便將  [0, 99]  范圍內(nèi)的值映射到  matplotlib.cm.binary  的顏色。然后,函數(shù)  cmap.to_rgba  將值列表轉(zhuǎn)換為顏色列表。因此,盡管  plt.bar()  并未內(nèi)置色彩映射支持,但依舊可以使用并不復(fù)雜的代碼實(shí)現(xiàn)色彩映射。

2.2.10 創(chuàng)建自定義配色方案

Matplotlib  使用的默認(rèn)顏色考慮的主要對(duì)象是打印文檔或出版物。因此,默認(rèn)情況下,背景為白色,而標(biāo)簽、軸和其他注釋則顯示為黑色,在某些不同的使用環(huán)境中,我們可能需要使用的配色方案;例如,將圖形背景設(shè)置為黑色,注釋設(shè)置為白色。 在  Matplotlib  中,各種對(duì)象(如軸、圖形和標(biāo)簽)都可以單獨(dú)修改,但逐個(gè)更改這些對(duì)象的顏色配置并非最佳方案。我們可以使用在《Matplotlib安裝與配置》介紹的方法,通過(guò)修改配置集中改變所有對(duì)象,以配置其默認(rèn)顏色或樣式:

mpl.rc('lines', linewidth = 2.)
mpl.rc('axes', facecolor = 'k', edgecolor = 'w')
mpl.rc('xtick', color = 'w')
mpl.rc('ytick', color = 'w')
mpl.rc('text', color = 'w')
mpl.rc('figure', facecolor = 'k', edgecolor ='w')
mpl.rc('axes', prop_cycle = mpl.cycler(color=[(0.1, .5, .75),(0.5, .5, .75)]))
x = np.linspace(0, 7, 1024)
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
plt.show()

2.3 自定義樣式

2.3.1 自定義線(xiàn)條樣式和線(xiàn)寬

在實(shí)踐中,除了顏色,大多數(shù)情況下我們還要對(duì)圖形的線(xiàn)條樣式等進(jìn)行控制,以為線(xiàn)條樣式添加多樣性。

2.3.1.2 自定義線(xiàn)條樣式

linestyle 參數(shù)是Matplotlib中用于指定線(xiàn)條樣式的可選參數(shù)。它用于控制在繪制折線(xiàn)圖、曲線(xiàn)圖等線(xiàn)性圖時(shí),線(xiàn)條的外觀樣式。

linestyle 參數(shù)的常用取值如下:

  • '-'  或  'solid' : 實(shí)線(xiàn) (默認(rèn)值)

  • '--'  或  'dashed' : 虛線(xiàn)

  • ':'  或  'dotted' : 點(diǎn)線(xiàn)

  • '-.'  或  'dashdot' : 點(diǎn)劃線(xiàn)

示例:

def gaussian(x, mu, sigma):
a = 1. / (sigma * np.sqrt(2. * np.pi))
b = -1. / (2. * sigma ** 2)
return a * np.exp(b * (x - mu) ** 2)
x = np.linspace(-6, 6, 1024)
plt.plot(x, gaussian(x, 0., 1.), color = 'y', linestyle = 'solid')
plt.plot(x, gaussian(x, 0., .5), color = 'c', linestyle = 'dashed')
plt.plot(x, gaussian(x, 0., .25), color = 'm', linestyle = 'dashdot')
plt.show()

使用  plt.plot()  的  linestyle  參數(shù)來(lái)控制曲線(xiàn)的樣式,其他可用線(xiàn)條樣式包括: solid dashed 、 dotted 、 dashdot 。同樣,線(xiàn)條樣式設(shè)置不僅限于  plt.plot() ,任何由線(xiàn)條構(gòu)成的圖形都可以使用此參數(shù),也可以說(shuō)  linestyle  參數(shù)可用于所有涉及線(xiàn)條渲染的命令。例如,可以修改條形圖的線(xiàn)條樣式:

n = 10
a = np.random.random(n)
b = np.random.random(n)
x = np.arange(n)
plt.bar(x, a, color='c')
plt.bar(x, a+b, bottom=a, color='w', edgecolor='black', linestyle = 'dashed')
plt.show()

可以通過(guò) edgecolor  參數(shù)改變邊線(xiàn)的默認(rèn)顏色

2.3.1.2 自定義線(xiàn)寬

使用  linewidth  參數(shù)可以修改線(xiàn)條的粗細(xì)。默認(rèn)情況下, linewidth  設(shè)置為1個(gè)單位。利用線(xiàn)條的粗細(xì)可以在視覺(jué)上強(qiáng)調(diào)某條特定的曲線(xiàn)。

示例:

def gaussian(x, mu, sigma):
a = 1. / (sigma * np.sqrt(2. * np.pi))
b = -1. / (2. * sigma ** 2)
return a * np.exp(b * (x - mu) ** 2)
x = np.linspace(-6, 6, 1024)
for i in range(64):
samples = np.random.standard_normal(50)
mu, sigma = np.mean(samples), np.std(samples) #平均值和標(biāo)準(zhǔn)差
plt.plot(x, gaussian(x, mu, sigma), color = '.75', linewidth = .5)
plt.plot(x, gaussian(x, 0., 1.), color = 'c', linewidth = 3.)
plt.show()

2.3.2 控制填充樣式

Matplotlib  提供了填充圖案用于填充平面。這些填充圖案,對(duì)于僅包含黑白兩色的圖形中具有重要作用。

示例:

n = 10
a = np.random.random(n)
b = np.random.random(n)
x = np.arange(n)
plt.bar(x, a, color='w', hatch='x', edgecolor='black')
plt.bar(x, a+b, bottom=a, color='w', edgecolor='black', hatch='/')
plt.show()

具有填充呈現(xiàn)性的函數(shù)(如  plt.bar()  )都可以使用可選參數(shù)  hatch  控制填充樣式,此參數(shù)的可選值包括: / ,  \ ,  | ,  - ,  + ,  x ,  o ,  O , .  和  * ,每個(gè)值對(duì)應(yīng)于不同的填充圖案; edgecolor  參數(shù)可用于控制填充圖案的顏色。

2.3.3 控制標(biāo)記

2.3.3.1 控制標(biāo)記樣式

《Matplotlib圖形繪制》中,我們已經(jīng)了解了如何繪制曲線(xiàn),并明白了曲線(xiàn)是由點(diǎn)之間的連線(xiàn)構(gòu)成的;此外,散點(diǎn)圖表示數(shù)據(jù)集中的每個(gè)點(diǎn)。而  Matplotlib  提供了多種形狀,可以用其他類(lèi)型的標(biāo)記替換點(diǎn)的樣式。 標(biāo)記的指定方式包括以下幾種:

  • 預(yù)定義標(biāo)記:預(yù)定義的形狀,表示為  [0, 8]  范圍內(nèi)的整數(shù)或某些預(yù)定義的字符串。

  • 頂點(diǎn)列表:值對(duì)列表,用作形狀路徑的坐標(biāo)。

  • 正多邊形:表示  N  邊正多邊形的三元組  (N, 0, angle)  ,其中  angle  為旋轉(zhuǎn)角度。

  • 星形多邊形:它表示為三元組  (N, 1, angle) ,代表  N  邊正星形,其中  angle  為旋轉(zhuǎn)角度。

a = np.random.standard_normal((100, 2))
a += np.array((-1, -1))
b = np.random.standard_normal((100, 2))
b += np.array((1, 1))
plt.scatter(a[:,0], a[:,1], color = 'm', marker = 'x')
plt.scatter(b[:,0], b[:,1], color = 'c', marker = '^')
plt.show()

使用  marker  參數(shù),可以為每個(gè)數(shù)據(jù)集合指定不同的標(biāo)記。

如果我們需要為每個(gè)點(diǎn)定義不同樣式該怎么辦呢?與  color  參數(shù)不同, marker  參數(shù)不接受標(biāo)記樣式列表作為輸入。因此,我們不能實(shí)現(xiàn)  plt.scatter()  的單次調(diào)來(lái)顯示具有不同標(biāo)記的多個(gè)點(diǎn)集。解決方案是,將每種類(lèi)型的數(shù)據(jù)點(diǎn)分隔置不同集合中,并為每個(gè)集合單獨(dú)調(diào)用  plt.scatter()  調(diào)用:

label_list = (
b'Iris-setosa',
b'Iris-versicolor',
b'Iris-virginica',
)
colors = ['c','y','m']
def read_label(label):
return label_list.index(label)
data = np.loadtxt('data.data', delimiter = ',', converters = { 4 : read_label })
marker_set = ('^', 'x', '.')
for i, marker in enumerate(marker_set):
data_subset = np.asarray([x for x in data if x[4] == i])
plt.scatter(data_subset[:,0], data_subset[:,1], color = colors[i], marker = marker)
plt.show()

對(duì)于  plt.plot() ,也可以使用相同的標(biāo)記參數(shù)訪(fǎng)問(wèn)標(biāo)記樣式。當(dāng)數(shù)據(jù)點(diǎn)密集時(shí),每個(gè)點(diǎn)都使用標(biāo)記進(jìn)行顯示將會(huì)導(dǎo)致圖片混亂,因此  Matplotlib  提供了  markevery  參數(shù),允許每隔  N  個(gè)點(diǎn)顯示一個(gè)標(biāo)記:

示例:

x = np.linspace(-6, 6, 1024)
y_1 = np.sinc(x)
y_2 = np.sinc(x) + 1
plt.plot(x, y_1, marker = 'x', color = '.75',label = 'y-1')
plt.plot(x, y_2, marker = 'o', color = 'k', markevery = 64,label = 'y-2')
plt.legend()
plt.show()

2.3.3.2 控制標(biāo)記的大小

標(biāo)記的大小可選參數(shù)  s  進(jìn)行控制:

示例:

a = np.random.standard_normal((100, 2))
a += np.array((-1, -1))
b = np.random.standard_normal((100, 2))
b += np.array((1, 1))
plt.scatter(a[:,0], a[:,1], c = 'm', s = 100.)
plt.scatter(b[:,0], b[:,1], c = 'c', s = 25.)
plt.show()

標(biāo)記的大小由  plt.scatter()  的參數(shù)  s  設(shè)置,但應(yīng)注意它設(shè)置的是標(biāo)記的表面積倍率而非半徑。 plt.scatter()  函數(shù)還可以接受列表作為  s  參數(shù)的輸入,其表示每個(gè)點(diǎn)對(duì)應(yīng)的大小。

示例:

m = np.random.standard_normal((1000, 2))
r_list = np.sum(m ** 2, axis = 1)
plt.scatter(m[:, 0], m[:, 1], c = 'w', edgecolor='c', marker = 'o', s = 32. * r_list)
plt.show()

對(duì)于Plot方法, plt.plot()  函數(shù)允許在  markersize  (或簡(jiǎn)寫(xiě)為  ms  )參數(shù)的幫助下更改標(biāo)記的大小,但是此參數(shù)不接受列表作為輸入。

2.3.3.3 自定義標(biāo)記

雖然  Matplotlib  提供了多種標(biāo)記形狀。但是在某些情況下我們可能仍然找不到適合具體需求的形狀。例如,我們可能希望使用公司徽標(biāo)等作為形狀。 在  Matplotlib  中,將形狀描述為一條路徑——一系列點(diǎn)的連接。因此,如果要定義我們自己的標(biāo)記形狀,必須提供一系列的點(diǎn):

示例:

shape_description = [
( 1., 2., mpath.Path.MOVETO),
( 1., 1., mpath.Path.LINETO),
( 2., 1., mpath.Path.LINETO),
( 2., -1., mpath.Path.LINETO),
( 1., -1., mpath.Path.LINETO),
( 1., -2., mpath.Path.LINETO),
(-1., -2., mpath.Path.LINETO),
(-1., -1., mpath.Path.LINETO),
(-2., -1., mpath.Path.LINETO),
(-2., 1., mpath.Path.LINETO),
(-1., 1., mpath.Path.LINETO),
(-1., 2., mpath.Path.LINETO),
( 0., 0., mpath.Path.CLOSEPOLY),
]
#mpath.Path.MOVETO表示將移動(dòng)到指定點(diǎn),mpath.Path.LINETO表示在指定點(diǎn)之間繪制一條直線(xiàn),mpath.Path.CLOSEPOLY表示繪制一個(gè)閉合路徑。
u, v, codes = zip(*shape_description)
#這行代碼使用zip()函數(shù)和解包操作將shape_description列表中的元組拆分成三個(gè)分別包含x坐標(biāo)、y坐標(biāo)和代碼的元組。
my_marker = mpath.Path(np.asarray((u, v)).T, codes)
#這是使用mpath.Path()方法創(chuàng)建自定義的路徑對(duì)象my_marker。這個(gè)路徑由x坐標(biāo)數(shù)組u和y坐標(biāo)數(shù)組v組成,并使用對(duì)應(yīng)的代碼數(shù)組codes來(lái)指定路徑上的點(diǎn)和連接方式。
data = np.random.rand(8, 8)
plt.scatter(data[:,0], data[:, 1], c = 'm', marker = my_marker, s = 75)
plt.show()

Path  對(duì)象的構(gòu)造函數(shù)將坐標(biāo)列表和指令列表作為輸入;每個(gè)坐標(biāo)一條指令,使用一個(gè)列表將坐標(biāo)和指令融合在一起,然后將坐標(biāo)列表和指令傳遞給路徑構(gòu)造函數(shù).

形狀是通過(guò)光標(biāo)的移動(dòng)來(lái)描述的:

  • MOVETO :此指令將光標(biāo)移動(dòng)到指定的坐標(biāo),并不畫(huà)線(xiàn)。

  • LINETO :這將在光標(biāo)當(dāng)前點(diǎn)和目標(biāo)點(diǎn)之間繪制直線(xiàn),并將光標(biāo)移動(dòng)至目標(biāo)點(diǎn)。

  • CLOSEPOLY :此指令僅用于關(guān)閉路徑,每個(gè)形狀都以這條指示結(jié)束。

理論上,任何形狀都是可能的。

總結(jié)

到此這篇關(guān)于python matplotlib繪圖詳解的文章就介紹到這了,更多相關(guān)python matplotlib繪圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中collections.Counter()的具體使用

    Python中collections.Counter()的具體使用

    本文主要介紹了Python中collections.Counter()的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 給numpy.array增加維度的超簡(jiǎn)單方法

    給numpy.array增加維度的超簡(jiǎn)單方法

    這篇文章主要介紹了給numpy.array增加維度的超簡(jiǎn)單方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 使用Pycharm分段執(zhí)行代碼

    使用Pycharm分段執(zhí)行代碼

    這篇文章主要介紹了使用Pycharm分段執(zhí)行代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 用python寫(xiě)一個(gè)帶有g(shù)ui界面的密碼生成器

    用python寫(xiě)一個(gè)帶有g(shù)ui界面的密碼生成器

    這篇文章主要介紹了用python寫(xiě)一個(gè)帶有g(shù)ui界面的密碼生成器,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • Python驗(yàn)證文件是否可讀寫(xiě)代碼分享

    Python驗(yàn)證文件是否可讀寫(xiě)代碼分享

    這篇文章主要介紹了Python驗(yàn)證文件是否可讀寫(xiě)代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Python數(shù)據(jù)分析之NumPy常用函數(shù)使用詳解

    Python數(shù)據(jù)分析之NumPy常用函數(shù)使用詳解

    本篇將介紹怎樣從文件中載入數(shù)據(jù),以及怎樣使用NumPy的基本數(shù)學(xué)和統(tǒng)計(jì)分析函數(shù)、學(xué)習(xí)讀寫(xiě)文件的方法,并嘗試函數(shù)式編程和NumPy線(xiàn)性代數(shù)運(yùn)算,來(lái)學(xué)習(xí)NumPy的常用函數(shù),需要的可以參考一下
    2022-05-05
  • Python基礎(chǔ)文件操作方法超詳細(xì)講解(詳解版)

    Python基礎(chǔ)文件操作方法超詳細(xì)講解(詳解版)

    文件就是操作系統(tǒng)為用戶(hù)或應(yīng)用程序提供的一個(gè)讀寫(xiě)硬盤(pán)的虛擬單位,文件的核心操作就是讀和寫(xiě),這篇文章主要介紹了Python基礎(chǔ)文件操作方法超詳細(xì)講解的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • python 基于opencv 實(shí)現(xiàn)一個(gè)鼠標(biāo)繪圖小程序

    python 基于opencv 實(shí)現(xiàn)一個(gè)鼠標(biāo)繪圖小程序

    這篇文章主要介紹了python 基于opencv 實(shí)現(xiàn)一個(gè)鼠標(biāo)繪圖小程序,幫助大家更好的理解和使用python的opencv庫(kù),感興趣的朋友可以了解下
    2020-12-12
  • Python多線(xiàn)程實(shí)現(xiàn)支付模擬請(qǐng)求過(guò)程解析

    Python多線(xiàn)程實(shí)現(xiàn)支付模擬請(qǐng)求過(guò)程解析

    這篇文章主要介紹了python多線(xiàn)程實(shí)現(xiàn)支付模擬請(qǐng)求過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • ubuntu 16.04下python版本切換的方法

    ubuntu 16.04下python版本切換的方法

    這篇文章主要為大家詳細(xì)介紹了ubuntu 16.04下python版本切換的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評(píng)論