一文帶你掌握Matplotlib風(fēng)格與樣式
1. Matplotlib 風(fēng)格
為了滿足不同的應(yīng)用需求, Matplotlib
中包含了 28
種不同的風(fēng)格,在進(jìn)行繪圖時,可以根據(jù)需要選擇不同的繪圖風(fēng)格。使用以下代碼可以獲取 Matplotlib
中所有可用的風(fēng)格:
import matplotlib as mpl from matplotlib import pyplot as plt # 查看 Matplotlib 可用繪圖風(fēng)格 print(plt.style.available)
打印出的可用風(fēng)格如下:
['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']
使用 plt.style.use("style")
可以修改默認(rèn)的繪圖風(fēng)格,其中 style
為 Matplolib
中可用的風(fēng)格:
import matplotlib as mpl from matplotlib import pyplot as plt import numpy as np # 設(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()
可以看到,與在《Matplotlib圖形繪制》中繪制的相同圖形相比,其風(fēng)格具有較大差別。除此之外, Maplotlib
中還有一些非常有意思的風(fēng)格,例如手繪風(fēng)格:
import matplotlib as mpl from matplotlib import pyplot as plt import numpy as np # 啟用手繪風(fēng)格 plt.xkcd() x = np.linspace(0, 2 * np.pi, 100) y = np.cos(x) plt.plot(x, y) plt.show()
可以看到,使用手繪風(fēng)格的方法十分簡單,只需要在繪圖前,調(diào)用 plt.xkcd()
函數(shù)即可:
import matplotlib as mpl from matplotlib import pyplot as plt import numpy as np # 啟用手繪風(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()
除了 Matplotlib
自帶的預(yù)設(shè)風(fēng)格外,我們也可以通過自定義顏色和樣式來構(gòu)建滿足需求的自定義風(fēng)格。
2. 使用自定義顏色
2.1 自定義顏色
Matplotlib
中有多種定義顏色的方法,常見的方法包括:
三元組 (
Triplets
):顏色可以描述為一個實(shí)數(shù)三元組,即顏色的紅、藍(lán)、綠分量,其中每個分量在[0,1]
區(qū)間內(nèi)。因此,(1.0, 0.0, 0.0)
表示純紅色,而(1.0, 0.0, 1.0)
則表示粉色。四元組 (
Quadruplets
):它們前三個元素與三元組定義相同,第四個元素定義透明度值。此值也在[0,1]
區(qū)間內(nèi)。將圖形渲染到圖片文件中時,使用透明顏色可以使繪制圖形與背景進(jìn)行混合。預(yù)定義名稱:
Matplotlib
將標(biāo)準(zhǔn)HTML
顏色名稱解釋為實(shí)際顏色。例如,字符串red
即可表示為紅色。同時一些某些顏色的具有簡潔的別名,如下表所示:
HTML
顏色字符串:Matplotlib
可以將HTML
顏色字符串解釋為實(shí)際顏色。這些字符串被定義為#RRGGBB
,其中RR
、GG
和BB
分別是使用十六進(jìn)制編碼的紅色、綠色和藍(lán)色分量。灰度字符串:
Matplotlib
將浮點(diǎn)值的字符串表示形式解釋為灰度,例如0.75
表示中淺灰色。
2.2 使用自定義顏色繪制曲線圖
通過設(shè)置 plt.plot()
函數(shù)的參數(shù) color
(或等效的簡寫為 c
),可以設(shè)置曲線的顏色,如下所示:
import numpy as np import matplotlib.pyplot as plt 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.3 使用自定義顏色繪制散點(diǎn)圖
可以以同樣的方式像控制曲線圖一樣控制散點(diǎn)圖的顏色,有兩種可用的形式:
- 為所有點(diǎn)使用相同的顏色 :所有點(diǎn)都將以相同的顏色顯示。
- 為每個點(diǎn)定義不同的顏色:為每個點(diǎn)提供不同的顏色。
2.3.1 為所有點(diǎn)使用相同的顏色
利用從二元高斯分布中提取的兩組點(diǎn) y_1
和 y_2
,每一組中點(diǎn)的顏色相同:
import numpy as np import matplotlib.pyplot as plt y_1 = np.random.standard_normal((150, 2)) 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.3.2 為每個點(diǎn)定義不同的顏色
我們有時會遇到這樣的繪圖場景,需要為不同類別的點(diǎn)使用不同的顏色進(jìn)行繪制,以觀察不同類別間的差異情況。以Fisher’s iris數(shù)據(jù)集為例,其數(shù)據(jù)集中數(shù)據(jù)類似如下所示:
5.0,3.3,1.4,0.2,Iris-setosa 7.0,3.2,4.7,1.4,Iris-versicolo
數(shù)據(jù)集的每個點(diǎn)都存儲在以逗號分隔的列表中。最后一列給出每個點(diǎn)的標(biāo)簽(標(biāo)簽包含三類: Iris-virginica
、 Iris-versicolor
和 Iris-Vertosa
)。在示例中,這些點(diǎn)的顏色將取決于它們的標(biāo)簽,如下所示:
import numpy as np import matplotlib.pyplot as plt label_set = ( b'Iris-setosa', b'Iris-versicolor', b'Iris-virginica', ) def read_label(label): return label_set.index(label) data = np.loadtxt('iris.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()
對于三種可能的標(biāo)簽,我們分別指定一種唯一的顏色,顏色在 color_set
中定義,標(biāo)簽在 label_set
中定義。 label_set
中的第 i
個標(biāo)簽與 color_set
中的第 i
個顏色相關(guān)聯(lián)。然后我們利用它們把標(biāo)簽列表轉(zhuǎn)換成顏色列表 color_list
。然后只需調(diào)用 plt.scatter()
一次即可顯示所有點(diǎn)及其顏色。
除了以上方法外,我們也可以通過對三個不同的類別單獨(dú)調(diào)用 plt.scatter()
來實(shí)現(xiàn),但這將需要更多的代碼。另外需要注意的是:如果兩點(diǎn)有可能有相同的坐標(biāo),但有不同的標(biāo)簽,顯示的顏色將是后繪制點(diǎn)的顏色,我們也可以使用帶有透明通道的顏色值,用來顯示重疊點(diǎn)。
2.4 為散點(diǎn)圖中數(shù)據(jù)點(diǎn)的邊使用自定義顏色
與 color
參數(shù)控制點(diǎn)的顏色一樣,可以使用 edgecolor
參數(shù)控制數(shù)據(jù)點(diǎn)的邊的顏色,可以為每個點(diǎn)的邊設(shè)置相同的顏色:
import numpy as np import matplotlib.pyplot as plt data = np.random.standard_normal((100, 2)) plt.scatter(data[:,0], data[:,1], color = '1.0', edgecolor='r') plt.show()
除了為每個點(diǎn)的邊設(shè)置相同的顏色外,也可以像在為每個點(diǎn)定義不同的顏色部分中介紹的一樣為每個點(diǎn)的邊設(shè)置不邊的顏色。
2.5 使用自定義顏色繪制條形圖
控制繪制條形圖使用的顏色與曲線圖和散點(diǎn)圖的工作原理相同,即通過可選參數(shù) color
:
import numpy as np import matplotlib.pyplot as plt 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ù) edgecolor
控制條形邊的顏色。`
import numpy as np import matplotlib.pyplot as plt values = np.random.random_integers(99, 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.6 使用自定義顏色繪制餅圖
自定義餅圖顏色的方法類似于條形圖:
import numpy as np import matplotlib.pyplot as plt 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)使用顏色列表中的顏色。在示例中,使用包含四種顏色的列表,為了給包含六個值的餅圖著色,其中有兩個顏色將使用兩次。
2.7 使用自定義顏色繪制箱型圖
使用以下代碼,修改箱型圖中線條顏色:
import numpy as np import matplotlib.pyplot as plt 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.8 使用色彩映射繪制散點(diǎn)圖
如果要在圖形中使用多種顏色,逐個定義每種顏色并不是最佳方案,色彩映射可以解決此問題。色彩映射用一個變量對應(yīng)一個值(顏色)的連續(xù)函數(shù)定義顏色。 Matplotlib
提供了幾種常見的顏色映射;大多數(shù)是連續(xù)的顏色漸變。色彩映射在 matplotib.cm
模塊中定義,提供創(chuàng)建和使用色彩映射的函數(shù),它還提供了預(yù)定義的色彩映射選擇。
函數(shù) plt.scatter()
接受 color
參數(shù)的值列表,當(dāng)提供 cmap
參數(shù)值時,這些值將被解釋為色彩映射的索引:
import numpy as np import matplotlib.cm as cm import matplotlib.pyplot as plt 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()
在 matplotlib.cm
模塊中提供了大量預(yù)定義的色彩映射,其中 cm.hsv
包含全光譜的顏色。
2.9 使用色彩映射繪制條形圖
plt.scatter()
函數(shù)內(nèi)置了對色彩映射的支持,其他一些繪圖函數(shù)也內(nèi)置支持色彩映射。但是,有些函數(shù)(如 plt.bar()
)并未內(nèi)置對色彩映射的支持,在這種情況下, Matplotlib
可以從顏色映射顯式生成顏色:
import numpy as np import matplotlib.cm as cm import matplotlib.pyplot as plt import matplotlib.colors as col values = np.random.random_integers(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.10 創(chuàng)建自定義配色方案
Matplotlib
使用的默認(rèn)顏色考慮的主要對象是打印文檔或出版物。因此,默認(rèn)情況下,背景為白色,而標(biāo)簽、軸和其他注釋則顯示為黑色,在某些不同的使用環(huán)境中,我們可能需要使用的配色方案;例如,將圖形背景設(shè)置為黑色,注釋設(shè)置為白色。
在 Matplotlib
中,各種對象(如軸、圖形和標(biāo)簽)都可以單獨(dú)修改,但逐個更改這些對象的顏色配置并非最佳方案。我們可以使用在《Matplotlib安裝與配置》介紹的方法,通過修改配置集中改變所有對象,以配置其默認(rèn)顏色或樣式:
import numpy as np import matplotlib as mpl from matplotlib import pyplot as plt 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()
3. 使用自定義樣式
3.1 控制線條樣式和線寬
在實(shí)踐中,除了顏色,大多數(shù)情況下我們還要對圖形的線條樣式等進(jìn)行控制,以為線條樣式添加多樣性。
3.1.1 線條樣式
import numpy as np import matplotlib.pyplot as plt 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ù)來控制曲線的樣式,其他可用線條樣式包括: solid
、 dashed
、 dotted
、 dashdot
。同樣,線條樣式設(shè)置不僅限于 plt.plot()
,任何由線條構(gòu)成的圖形都可以使用此參數(shù),也可以說 linestyle
參數(shù)可用于所有涉及線條渲染的命令。例如,可以修改條形圖的線條樣式:
import numpy as np import matplotlib.pyplot as plt 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()
由于在條形圖、餅圖等圖形中,默認(rèn)的邊線的顏色為白色,因此若要在白色背景上顯示這些邊線,需要通過 edgecolor
參數(shù)改變邊線的默認(rèn)顏色。
3.1.2 線寬
使用 linewidth
參數(shù)可以修改線條的粗細(xì)。默認(rèn)情況下, linewidth
設(shè)置為1個單位。利用線條的粗細(xì)可以在視覺上強(qiáng)調(diào)某條特定的曲線。
import numpy as np import matplotlib.pyplot as plt 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) plt.plot(x, gaussian(x, mu, sigma), color = '.75', linewidth = .5) plt.plot(x, gaussian(x, 0., 1.), color = 'c', linewidth = 3.) plt.show()
3.2 控制填充樣式
Matplotlib
提供了填充圖案用于填充平面。這些填充圖案,對于僅包含黑白兩色的圖形中具有重要作用。
import numpy as np import matplotlib.pyplot as plt 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
, .
和 *
,每個值對應(yīng)于不同的填充圖案; edgecolor
參數(shù)可用于控制填充圖案的顏色。
3.3 控制標(biāo)記
3.3.1 控制標(biāo)記樣式
在《Matplotlib圖形繪制》中,我們已經(jīng)了解了如何繪制曲線,并明白了曲線是由點(diǎn)之間的連線構(gòu)成的;此外,散點(diǎn)圖表示數(shù)據(jù)集中的每個點(diǎn)。而 Matplotlib
提供了多種形狀,可以用其他類型的標(biāo)記替換點(diǎn)的樣式。標(biāo)記的指定方式包括以下幾種:
- 預(yù)定義標(biāo)記:預(yù)定義的形狀,表示為
[0, 8]
范圍內(nèi)的整數(shù)或某些預(yù)定義的字符串。 - 頂點(diǎn)列表:值對列表,用作形狀路徑的坐標(biāo)。
- 正多邊形:表示
N
邊正多邊形的三元組(N, 0, angle)
,其中angle
為旋轉(zhuǎn)角度。 - 星形多邊形:它表示為三元組
(N, 1, angle)
,代表N
邊正星形,其中angle
為旋轉(zhuǎn)角度。
import numpy as np import matplotlib.pyplot as plt 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ù),可以為每個數(shù)據(jù)集合指定不同的標(biāo)記。
我們已經(jīng)學(xué)習(xí)了如何在散點(diǎn)圖中為每個點(diǎn)定義不同的顏色,如果我們需要為每個點(diǎn)定義不同樣式該怎么辦呢?問題在于,與 color
參數(shù)不同, marker
參數(shù)不接受標(biāo)記樣式列表作為輸入。因此,我們不能實(shí)現(xiàn) plt.scatter()
的單次調(diào)來顯示具有不同標(biāo)記的多個點(diǎn)集。解決方案是,將每種類型的數(shù)據(jù)點(diǎn)分隔置不同集合中,并為每個集合單獨(dú)調(diào)用 plt.scatter()
調(diào)用:
import numpy as np import matplotlib.pyplot as plt 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('iris.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()
對于 plt.plot()
,也可以使用相同的標(biāo)記參數(shù)訪問標(biāo)記樣式。當(dāng)數(shù)據(jù)點(diǎn)密集時,每個點(diǎn)都使用標(biāo)記進(jìn)行顯示將會導(dǎo)致圖片混亂,因此 Matplotlib
提供了 markevery
參數(shù),允許每隔 N
個點(diǎn)顯示一個標(biāo)記:
import numpy as np import matplotlib.pyplot as plt 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') plt.plot(x, y_2, marker = 'o', color = 'k', markevery = 64) plt.show()
3.3.1 控制標(biāo)記大小
標(biāo)記的大小可選參數(shù) s
進(jìn)行控制:
import numpy as np import matplotlib.pyplot as plt 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ù)的輸入,其表示每個點(diǎn)對應(yīng)的大?。?/p>
import numpy as np import matplotlib.pyplot as plt 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()
plt.plot()
函數(shù)允許在 markersize
(或簡寫為 ms
)參數(shù)的幫助下更改標(biāo)記的大小,但是此參數(shù)不接受列表作為輸入。
3.3.3 創(chuàng)建自定義標(biāo)記
雖然 Matplotlib
提供了多種標(biāo)記形狀。但是在某些情況下我們可能仍然找不到適合具體需求的形狀。例如,我們可能希望使用公司徽標(biāo)等作為形狀。
在 Matplotlib
中,將形狀描述為一條路徑——一系列點(diǎn)的連接。因此,如果要定義我們自己的標(biāo)記形狀,必須提供一系列的點(diǎn):
import numpy as np import matplotlib.path as mpath from matplotlib import pyplot as plt 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), ] u, v, codes = zip(*shape_description) my_marker = mpath.Path(np.asarray((u, v)).T, codes) data = np.random.rand(8, 8) plt.scatter(data[:,0], data[:, 1], c = 'm', marker = my_marker, s = 75) plt.show()
通過以上示例,可以看到,所有帶有標(biāo)記的 plt
繪圖函數(shù)都有一個可選參數(shù) marker
,其參數(shù)值可以是預(yù)定義的 Matplotlib
標(biāo)記,也可以是自定義的路徑實(shí)例,路徑對象在 matplotlib.path
模塊中定義。
Path
對象的構(gòu)造函數(shù)將坐標(biāo)列表和指令列表作為輸入;每個坐標(biāo)一條指令,使用一個列表將坐標(biāo)和指令融合在一起,然后將坐標(biāo)列表和指令傳遞給路徑構(gòu)造函數(shù),如下所示:
u, v, codes = zip(*shape_description) my_marker = mpath.Path(np.asarray((u, v)).T, codes)
形狀是通過光標(biāo)的移動來描述的:
MOVETO
:此指令將光標(biāo)移動到指定的坐標(biāo),并不畫線。LINETO
:這將在光標(biāo)當(dāng)前點(diǎn)和目標(biāo)點(diǎn)之間繪制直線,并將光標(biāo)移動至目標(biāo)點(diǎn)。CLOSEPOLY
:此指令僅用于關(guān)閉路徑,每個形狀都以這條指示結(jié)束。
理論上,任何形狀都是可能的,我們只需要描述它的路徑。但在實(shí)踐中,如果想使用復(fù)雜的形狀,最好可以提前進(jìn)行轉(zhuǎn)換工作。
相關(guān)鏈接
總結(jié)
到此這篇關(guān)于Matplotlib風(fēng)格與樣式的文章就介紹到這了,更多相關(guān)Matplotlib風(fēng)格與樣式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中利用LSTM模型進(jìn)行時間序列預(yù)測分析的實(shí)現(xiàn)
這篇文章主要介紹了Python中利用LSTM模型進(jìn)行時間序列預(yù)測分析的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Sentry的安裝、配置、使用教程(Sentry日志手機(jī)系統(tǒng))
Sentry?是一個實(shí)時事件日志記錄和聚合平臺,由于ExceptionLess官方提供的客戶端只有.Net/.NetCore平臺和js的,本文繼續(xù)介紹另一個日志收集系統(tǒng)Sentry,感興趣的朋友一起看看吧2022-07-07Python?Watchdog實(shí)現(xiàn)實(shí)時監(jiān)控文件系統(tǒng)
Python?Watchdog是一個優(yōu)秀的第三方庫,用于實(shí)現(xiàn)高效的文件系統(tǒng)監(jiān)控,本文將為大家詳細(xì)介紹一下Python如何使用Watchdog實(shí)現(xiàn)實(shí)時監(jiān)控文件,需要的可以參考下2023-11-11Pytorch之8層神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)Cifar-10圖像分類驗(yàn)證集準(zhǔn)確率94.71%
這篇文章主要介紹了Pytorch之8層神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)Cifar-10圖像分類驗(yàn)證集準(zhǔn)確率94.71%問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03Python編寫車票訂購系統(tǒng)?Python實(shí)現(xiàn)快遞收費(fèi)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python編寫車票訂購系統(tǒng),Python實(shí)現(xiàn)快遞收費(fèi)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08python神經(jīng)網(wǎng)絡(luò)tfrecords文件的寫入讀取及內(nèi)容解析
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)tfrecords文件的寫入讀取及內(nèi)容解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python實(shí)現(xiàn)圖書借閱管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)圖書借閱管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03跟老齊學(xué)Python之編寫類之一創(chuàng)建實(shí)例
上兩篇文章雖然已經(jīng)對類有了一點(diǎn)點(diǎn)模糊概念,但是,閱讀前面一講的內(nèi)容的確感到累呀,都是文字,連代碼都沒有。本講就要簡單多了,嘗試走一個類的流程。2014-10-10