一、基本介绍
plt.colorbar是matplotlib库中用来添加颜色条的函数。颜色条可以为图形提供重要的信息,例如数据值对应的颜色等级。在其最简单的用法中,plt.colorbar函数将当前活动图形(gca)中的图像作为输入,并添加一个垂直颜色条(色卡)到其右侧。
import numpy as np
import matplotlib.pyplot as plt
# 生成数据并画出散点图
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的主要功能是将特定范围的数据值与颜色进行匹配,并创建相应的颜色条。这是通过指定cmap参数来实现的,该参数指定了要使用哪个颜色映射。matplotlib提供了几种内置的颜色映射,其中包括:
viridis plasma inferno magma hot cool spring summer autumn winter也可以创建自定义颜色映射,具体见下方代码。
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)
# 生成数据并画出散点图
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()
三、颜色条格式化
为了让颜色条上的标签更为清晰易读,可以通过设置plt.colorbar的标签参数label和刻度参数ticks等进行调整。此外,您还可以使用format参数来格式化标签。
import numpy as np
import matplotlib.pyplot as plt
# 生成数据并画出散点图
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默认会创建一个垂直颜色条,但是有时候需要一个水平颜色条。您只需要将方向参数orientation设置为'horizontal'即可。
import numpy as np
import matplotlib.pyplot as plt
# 生成数据并画出散点图
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()
五、多图形颜色条
如果您在单个图形中绘制了多个数据集,每个数据集都需要用不同的颜色映射。此时,您可以为每个子图创建各自的颜色条。示例代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 生成数据并画出两个子图形
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)
# 绘制第一个子图形并添加颜色条
axs[0].scatter(x, y, s=sizes, c=colors1, cmap='viridis')
cb1 = plt.colorbar(ax=axs[0], label='First')
# 绘制第二个子图形并添加颜色条
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()