Matplotlib 多个散点子图并共享颜色条
在本文中,我们将介绍如何使用Matplotlib绘制多个散点子图,并共享颜色条。散点子图是绘制多样化数据的一种常见方式,共享颜色条则可以统一不同子图的颜色范围,增加图表的可读性和可比性。
阅读更多:Matplotlib 教程
前置知识
在继续学习Matplotlib多个散点子图共享颜色条之前,需要了解散点图和基本的Matplotlib绘图操作。这里简单介绍一下散点图的绘制方法。
使用Matplotlib绘制散点图,需要使用scatter函数。它的基本语法如下所示:
plt.scatter(x, y, s=None, c=None, cmap=None)
其中,x和y分别是散点的横轴和纵轴坐标,s是点的大小,c是点的颜色,cmap是使用的颜色映射表。可以将不同的点分别用不同的颜色表示,也可以使用颜色映射表将数据映射到某种颜色范围内。
绘制多个散点子图
要绘制多个散点子图,首先需要创建一个有多个子图的图表。可以使用plt.subplots函数创建,其基本语法如下所示:
fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(10, 6))
其中,nrows和ncols分别指定子图的行数和列数,figsize是整个图表的尺寸。通过axes[i][j]可以访问第i行、第j列的子图。
下面我们以示例数据为例,绘制两个散点子图,分别显示两个班级的成绩分布情况。代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 生成示例数据
np.random.seed(0)
x1 = np.random.randn(50)
y1 = np.random.randn(50)
x2 = np.random.randn(30)
y2 = np.random.randn(30)
# 创建子图
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 4))
# 绘制散点图
axes[0].scatter(x1, y1, c='r', label='class 1')
axes[1].scatter(x2, y2, c='b', label='class 2')
# 添加图例和标题
axes[0].legend()
axes[0].set_title('Class 1 Scores')
axes[1].legend()
axes[1].set_title('Class 2 Scores')
# 显示图形
plt.show()
我们成功地绘制了两个散点子图,分别显示了两个班级的成绩分布情况。
多个散点子图共享颜色条
接下来,我们来介绍如何将不同的散点子图共享颜色条。这样可以统一不同子图的颜色范围,增加图表的可读性和可比性。
实现方法是,首先需要将所有散点子图的数据都放在一个坐标系下,然后使用共享颜色条将颜色范围关联到这个坐标系上。下面我们以实例数据为例,绘制两个散点子图并共享颜色条。代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 生成示例数据
np.random.seed(0)
x1 = np.random.randn(50)
y1 = np.random.randn(50)
x2 = np.random.randn(30)
y2 = np.random.randn(30)
data1 = np.c_[x1, y1]
data2 = np.c_[x2, y2]
# 计算数据范围
min_val = min(data1.min(), data2.min())
max_val = max(data1.max(), data2.max())
# 创建子图和图形
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 4))
fig.subplots_adjust(wspace=0.2)
# 绘制散点图
scatter1 = axes[0].scatter(x1, y1, c='r', label='class 1')
scatter1.set_clim([min_val, max_val])
scatter2 = axes[1].scatter(x2, y2, c='b', label='class 2')
scatter2.set_clim([min_val, max_val])
# 添加颜色条
cbar = fig.colorbar(scatter1, ax=axes.ravel().tolist())
# 添加图例和标题
axes[0].legend()
axes[0].set_title('Class 1 Scores')
axes[1].legend()
axes[1].set_title('Class 2 Scores')
# 显示图形
plt.show()
我们成功地绘制了两个散点子图,并共享了一个颜色条。颜色条上的颜色范围与整个数据范围相同,使不同子图间的颜色分布更具可比性和可读性。
总结
本文介绍了如何使用Matplotlib绘制多个散点子图,并共享颜色条。我们通过示例代码详细讲解了各个步骤,包括创建子图、绘制散点图、添加颜色条、添加图例和标题等。这种方法能够统一不同子图的颜色范围,增加图表的可读性和可比性,是绘制多样化数据图表的一种常用方式。
极客教程