一、基本介紹
plt.colorbar是matplotlib庫中用來添加顏色條的函數(shù)。顏色條可以為圖形提供重要的信息,例如數(shù)據(jù)值對應(yīng)的顏色等級。在其最簡單的用法中,plt.colorbar函數(shù)將當(dāng)前活動(dòng)圖形(gca)中的圖像作為輸入,并添加一個(gè)垂直顏色條(色卡)到其右側(cè)。
import numpy as np
import matplotlib.pyplot as plt
# 生成數(shù)據(jù)并畫出散點(diǎn)圖
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
sizes = np.pi * (15*np.random.rand(N))**2
plt.scatter(x, y, s=sizes, c=colors)
plt.colorbar()
plt.show()
二、顏色映射
plt.colorbar的主要功能是將特定范圍的數(shù)據(jù)值與顏色進(jìn)行匹配,并創(chuàng)建相應(yīng)的顏色條。這是通過指定cmap參數(shù)來實(shí)現(xiàn)的,該參數(shù)指定了要使用哪個(gè)顏色映射。matplotlib提供了幾種內(nèi)置的顏色映射,其中包括:
viridis plasma inferno magma hot cool spring summer autumn winter也可以創(chuàng)建自定義顏色映射,具體見下方代碼。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
# 自定義顏色映射
colors = [(0, 0, 1), (0, 1, 0), (1, 0, 0)]
cmap = LinearSegmentedColormap.from_list('my_cmap', colors, N=3)
# 生成數(shù)據(jù)并畫出散點(diǎn)圖
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
z = np.random.randint(0, 3, N)
plt.scatter(x, y, c=z, cmap=cmap)
plt.colorbar(ticks=[0, 1, 2], label='Class')
plt.show()
三、顏色條格式化
為了讓顏色條上的標(biāo)簽更為清晰易讀,可以通過設(shè)置plt.colorbar的標(biāo)簽參數(shù)label和刻度參數(shù)ticks等進(jìn)行調(diào)整。此外,您還可以使用format參數(shù)來格式化標(biāo)簽。
import numpy as np
import matplotlib.pyplot as plt
# 生成數(shù)據(jù)并畫出散點(diǎn)圖
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
z = np.random.randint(0, 100, N)
plt.scatter(x, y, c=z, cmap='jet')
plt.colorbar(format='%d%%', label='Percentage')
plt.show()
四、水平顏色條
plt.colorbar默認(rèn)會創(chuàng)建一個(gè)垂直顏色條,但是有時(shí)候需要一個(gè)水平顏色條。您只需要將方向參數(shù)orientation設(shè)置為'horizontal'即可。
import numpy as np
import matplotlib.pyplot as plt
# 生成數(shù)據(jù)并畫出散點(diǎn)圖
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
sizes = np.pi * (15*np.random.rand(N))**2
plt.scatter(x, y, s=sizes, c=colors)
plt.colorbar(orientation='horizontal')
plt.show()
五、多圖形顏色條
如果您在單個(gè)圖形中繪制了多個(gè)數(shù)據(jù)集,每個(gè)數(shù)據(jù)集都需要用不同的顏色映射。此時(shí),您可以為每個(gè)子圖創(chuàng)建各自的顏色條。示例代碼如下:
import numpy as np
import matplotlib.pyplot as plt
# 生成數(shù)據(jù)并畫出兩個(gè)子圖形
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors1 = np.random.rand(N)
sizes = np.pi * (15*np.random.rand(N))**2
fig, axs = plt.subplots(1, 2)
# 繪制第一個(gè)子圖形并添加顏色條
axs[0].scatter(x, y, s=sizes, c=colors1, cmap='viridis')
cb1 = plt.colorbar(ax=axs[0], label='First')
# 繪制第二個(gè)子圖形并添加顏色條
colors2 = np.random.rand(N)
axs[1].scatter(x, y, s=sizes, c=colors2, cmap='plasma')
cb2 = plt.colorbar(ax=axs[1], label='Second')
plt.show()