Matplotlib 散點圖
建立散點圖
使用 Pyplot,您可以呼叫 scatter()
函式來繪製散點圖。
scatter()
函式為每個觀測值繪製一個點。它需要兩個長度相同的陣列,一個用於 x 軸的值,另一個用於 y 軸的值。
示例
簡單的散點圖
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y)
plt.show()
結果
上面的示例中的觀測值是 13 輛汽車經過的結果。
X 軸顯示汽車的年齡。
Y 軸顯示汽車經過時的速度。
觀測值之間是否存在任何關係?
似乎汽車越新,開得越快,但這可能只是巧合,畢竟我們只記錄了 13 輛汽車。
比較繪圖
在上面的示例中,速度和年齡之間似乎存在關係,但如果我們繪製另一天的觀測值呢?散點圖是否會告訴我們其他資訊?
示例
在同一圖中繪製兩個圖
import matplotlib.pyplot as plt
import numpy as np
# 第一天,13 輛汽車的年齡和速度
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y)
# 第二天,15 輛汽車的年齡和速度
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y)
plt.show()
結果
注意:這兩個圖以兩種不同的顏色繪製,預設是藍色和橙色。您將在本章後面學習如何更改顏色。
透過比較這兩個圖,我認為可以安全地說它們都得出了相同的結論:汽車越新,開得越快。
顏色
您可以使用 color
或 c
引數為每個散點圖設定自己的顏色。
示例
設定標記的自定義顏色
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y, color = 'hotpink')
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')
plt.show()
結果
為每個點著色
您還可以透過將顏色陣列用作 c
引數的值來為每個點設定特定的顏色。
注意:對於此操作,您不能使用 color
引數,只能使用 c
引數。
示例
設定標記的自定義顏色
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array(["red","green","blue","yellow","pink","black","orange","purple","beige","brown","gray","cyan","magenta"])
plt.scatter(x, y, c=colors)
plt.show()
結果
顏色對映
Matplotlib 模組有許多可用的顏色對映。
顏色對映就像一個顏色列表,其中每種顏色都有一個從 0 到 100 的值。
這是一個顏色對映的示例
此顏色對映稱為“viridis”,正如您所見,它從 0(紫色)到 100(黃色)不等。
如何使用顏色對映
您可以使用關鍵字引數 cmap
並指定顏色對映的名稱來設定顏色對映,在本例中為 'viridis'
,這是 Matplotlib 中可用的內建顏色對映之一。
此外,您需要建立一個包含值(從 0 到 100)的陣列,為散點圖中的每個點分配一個值。
示例
建立一個顏色陣列,並在散點圖中指定顏色對映
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.show()
結果
您可以透過包含 plt.colorbar()
語句來在繪圖中包含顏色對映。
示例
包含實際的顏色對映
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()
plt.show()
結果
可用的顏色對映
您可以選擇任何內建的顏色對映。
名稱 | Reverse | |||
---|---|---|---|---|
Accent | 試一試 » | Accent_r | 試一試 » | |
Blues | 試一試 » | Blues_r | 試一試 » | |
BrBG | 試一試 » | BrBG_r | 試一試 » | |
BuGn | 試一試 » | BuGn_r | 試一試 » | |
BuPu | 試一試 » | BuPu_r | 試一試 » | |
CMRmap | 試一試 » | CMRmap_r | 試一試 » | |
Dark2 | 試一試 » | Dark2_r | 試一試 » | |
GnBu | 試一試 » | GnBu_r | 試一試 » | |
Greens | 試一試 » | Greens_r | 試一試 » | |
Greys | 試一試 » | Greys_r | 試一試 » | |
OrRd | 試一試 » | OrRd_r | 試一試 » | |
Oranges | 試一試 » | Oranges_r | 試一試 » | |
PRGn | 試一試 » | PRGn_r | 試一試 » | |
Paired | 試一試 » | Paired_r | 試一試 » | |
Pastel1 | 試一試 » | Pastel1_r | 試一試 » | |
Pastel2 | 試一試 » | Pastel2_r | 試一試 » | |
PiYG | 試一試 » | PiYG_r | 試一試 » | |
PuBu | 試一試 » | PuBu_r | 試一試 » | |
PuBuGn | 試一試 » | PuBuGn_r | 試一試 » | |
PuOr | 試一試 » | PuOr_r | 試一試 » | |
PuRd | 試一試 » | PuRd_r | 試一試 » | |
Purples | 試一試 » | Purples_r | 試一試 » | |
RdBu | 試一試 » | RdBu_r | 試一試 » | |
RdGy | 試一試 » | RdGy_r | 試一試 » | |
RdPu | 試一試 » | RdPu_r | 試一試 » | |
RdYlBu | 試一試 » | RdYlBu_r | 試一試 » | |
RdYlGn | 試一試 » | RdYlGn_r | 試一試 » | |
Reds | 試一試 » | Reds_r | 試一試 » | |
Set1 | 試一試 » | Set1_r | 試一試 » | |
Set2 | 試一試 » | Set2_r | 試一試 » | |
Set3 | 試一試 » | Set3_r | 試一試 » | |
Spectral | 試一試 » | Spectral_r | 試一試 » | |
Wistia | 試一試 » | Wistia_r | 試一試 » | |
YlGn | 試一試 » | YlGn_r | 試一試 » | |
YlGnBu | 試一試 » | YlGnBu_r | 試一試 » | |
YlOrBr | 試一試 » | YlOrBr_r | 試一試 » | |
YlOrRd | 試一試 » | YlOrRd_r | 試一試 » | |
afmhot | 試一試 » | afmhot_r | 試一試 » | |
autumn | 試一試 » | autumn_r | 試一試 » | |
binary | 試一試 » | binary_r | 試一試 » | |
bone | 試一試 » | bone_r | 試一試 » | |
brg | 試一試 » | brg_r | 試一試 » | |
bwr | 試一試 » | bwr_r | 試一試 » | |
cividis | 試一試 » | cividis_r | 試一試 » | |
cool | 試一試 » | cool_r | 試一試 » | |
coolwarm | 試一試 » | coolwarm_r | 試一試 » | |
copper | 試一試 » | copper_r | 試一試 » | |
cubehelix | 試一試 » | cubehelix_r | 試一試 » | |
旗幟 | 試一試 » | flag_r | 試一試 » | |
gist_earth | 試一試 » | gist_earth_r | 試一試 » | |
gist_gray | 試一試 » | gist_gray_r | 試一試 » | |
gist_heat | 試一試 » | gist_heat_r | 試一試 » | |
gist_ncar | 試一試 » | gist_ncar_r | 試一試 » | |
gist_rainbow | 試一試 » | gist_rainbow_r | 試一試 » | |
gist_stern | 試一試 » | gist_stern_r | 試一試 » | |
gist_yarg | 試一試 » | gist_yarg_r | 試一試 » | |
gnuplot | 試一試 » | gnuplot_r | 試一試 » | |
gnuplot2 | 試一試 » | gnuplot2_r | 試一試 » | |
gray | 試一試 » | gray_r | 試一試 » | |
hot | 試一試 » | hot_r | 試一試 » | |
hsv | 試一試 » | hsv_r | 試一試 » | |
inferno | 試一試 » | inferno_r | 試一試 » | |
jet | 試一試 » | jet_r | 試一試 » | |
magma | 試一試 » | magma_r | 試一試 » | |
nipy_spectral | 試一試 » | nipy_spectral_r | 試一試 » | |
ocean | 試一試 » | ocean_r | 試一試 » | |
pink | 試一試 » | pink_r | 試一試 » | |
plasma | 試一試 » | plasma_r | 試一試 » | |
prism | 試一試 » | prism_r | 試一試 » | |
rainbow | 試一試 » | rainbow_r | 試一試 » | |
seismic | 試一試 » | seismic_r | 試一試 » | |
spring | 試一試 » | spring_r | 試一試 » | |
summer | 試一試 » | summer_r | 試一試 » | |
tab10 | 試一試 » | tab10_r | 試一試 » | |
tab20 | 試一試 » | tab20_r | 試一試 » | |
tab20b | 試一試 » | tab20b_r | 試一試 » | |
tab20c | 試一試 » | tab20c_r | 試一試 » | |
地形 | 試一試 » | terrain_r | 試一試 » | |
twilight | 試一試 » | twilight_r | 試一試 » | |
twilight_shifted | 試一試 » | twilight_shifted_r | 試一試 » | |
viridis | 試一試 » | viridis_r | 試一試 » | |
winter | 試一試 » | winter_r | 試一試 » |
大小
您可以使用 s
引數更改點的大小。
與顏色類似,請確保用於大小的陣列與 x 軸和 y 軸的陣列長度相同。
示例
設定標記的自定義大小
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes = np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x, y, s=sizes)
plt.show()
結果
透明度
您可以使用 alpha
引數調整點的透明度。
與顏色類似,請確保用於大小的陣列與 x 軸和 y 軸的陣列長度相同。
示例
設定標記的自定義大小
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes = np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x, y, s=sizes, alpha=0.5)
plt.show()
結果
結合顏色、大小和透明度
您可以結合使用顏色對映和不同大小的點。如果點的透明度很高,這將視覺化效果最好。
示例
建立包含 100 個 x 點、y 點、顏色和大小值的隨機陣列
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randint(100, size=(100))
y = np.random.randint(100, size=(100))
colors = np.random.randint(100, size=(100))
sizes = 10 * np.random.randint(100, size=(100))
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='nipy_spectral')
plt.colorbar()
plt.show()
結果