欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文帶你掌握Matplotlib風(fēng)格與樣式

 更新時間:2023年09月21日 10:51:46   作者:盼小輝丶  
學(xué)過Python的小伙伴都會知道,Matplotlib是Python生態(tài)最好用的可視化工具庫,下面這篇文章主要給大家介紹了關(guān)于Matplotlib風(fēng)格與樣式的相關(guān)資料,需要的朋友可以參考下

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)格

可以看到,與在《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)格

可以看到,使用手繪風(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()

手繪風(fēng)格

除了  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()

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

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()

為每個點(diǎn)定義不同的顏色

對于三種可能的標(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ù)據(jù)點(diǎn)的邊使用自定義顏色

除了為每個點(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()

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

在  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()

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

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()

控制標(biāo)記樣式

可以看到,使用  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()

控制標(biāo)記樣式

對于  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()

控制標(biāo)記樣式

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)記大小

標(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()

控制標(biāo)記大小

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()

創(chuàng)建自定義標(biāo)識

通過以上示例,可以看到,所有帶有標(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)文章

最新評論