在数据可视化中,散点图是一种非常常见的图表形式。Python中的matplotlib库提供了scatter()函数来绘制散点图。本文将详细介绍Python scatter函数的用法,以及一些实例供读者参考。
1. scatter函数介绍
scatter函数用于绘制散点图, 其基本语法为:
matplotlib.pyplot.scatter(
x, # 点的x坐标
y, # 点的y坐标
s=None, # 标量或数组,标记的大小
c=None, # 标量或数组,标记的颜色
marker=None, # 标记的形状
cmap=None, # Colormap对象,用于将标量映射到颜色
norm=None, # matplotlib.colors.Normalize类实例,用于将数据缩放到0-1范围
vmin=None, # cmap中的最小值
vmax=None, # cmap中的最大值
alpha=None, # 标记的不透明度
linewidths=None, # 标记的边框宽度
edgecolors=None, # 标记的边框颜色
*,
plotnonfinite=False, # 是否绘制无限值或nan值
data=None, # 数据是可选的
**kwargs, # 其它关键字参数,传递给matplotlib.collections.PathCollection
) -> matplotlib.collections.PathCollection
1.1 scatter函数参数说明
scatter函数的参数与matplotlib.axes.Axes.plot方法类似,notable的参数包括:
① x、y:数组形式的数据集
② s:标量或数组,标记的大小。可以是数字或与x和y长度相同的一维数组
③ c:标量或数组,标记的颜色。可以是数字或与x和y长度相同的一维数组。
④ marker:标记的形状。可以是一个字符,也可以是一个matplotlib.path.Path实例。默认是' o '。
⑤ cmap:Colormap对象,用于将标量映射到颜色。
⑥ norm:matplotlib.colors.Normalize类实例,用于将数据缩放到0-1范围内。
⑦ alpha:标记的不透明度
⑧ linewidths:标记的边框宽度
⑨ edgecolors:标记的边框颜色
⑩ plotnonfinite:是否绘制无限值或nan值
例如,我们可以使用以下代码创建一个简单的散点图:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(50)
y = np.random.rand(50)
plt.scatter(x, y)
plt.show()
运行上述代码,我们可以得到如下所示的散点图:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/97322/1643888244056-1bc6c3d6-7e3c-426d-88c3-4d81a47d6793.png#clientId=u3d937365-6bc7-4&from=paste&height=199&id=u8595b478&margin=%5Bobject%20Object%5D&name=image.png&originHeight=398&originWidth=398&originalType=binary&ratio=1&size=12625&status=done&style=none&taskId=u05e027b5-7c46-440c-9d33-26a66b026f3&width=199)
2. scatter函数实例
下面我们来看一些具体的实例,帮助读者更好地理解scatter函数的用法。
2.1 带颜色的散点图
当我们想要在散点图中添加颜色信息时,可以将c参数设置为一个与x和y长度相同的数组。例如,我们可以使用以下代码创建一个带有随机颜色的散点图:
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
plt.scatter(x, y, c=colors)
plt.show()
运行上述代码,我们可以得到如下所示的散点图:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/97322/1643888244162-e2ac8cc7-5f9d-4d6a-a672-4395eeec83bf.png#clientId=u3d937365-6bc7-4&from=paste&height=199&id=u5941d2bc&margin=%5Bobject%20Object%5D&name=image.png&originHeight=398&originWidth=398&originalType=binary&ratio=1&size=12626&status=done&style=none&taskId=u2ec530f5-56b0-4b3c-a324-8b5c3458ad1&width=199)
我们也可以使用颜色映射来为数据集中的每个点分配颜色。例如,我们可以使用以下代码创建一个带有颜色映射的散点图:
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar() # 添加颜色条
plt.show()
运行上述代码,我们可以得到如下所示的散点图:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/97322/1643888244258-3fb13e3c-831b-4a62-83eb-e5c3079d889e.png#clientId=u3d937365-6bc7-4&from=paste&height=203&id=udb50d6f9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=407&originWidth=416&originalType=binary&ratio=1&size=20342&status=done&style=none&taskId=ua2fd5d90-327d-4fc8-9f2d-819a0a77b13&width=208)
2.2 不同大小的标记
当我们想要根据某些条件在散点图中使用不同大小的标记时,可以将s参数设置为一个大小相同的数组,并在其中存储每个点的大小信息。例如,以下代码创建一个散点图,其中每个点的大小根据其在横坐标上的值而定:
x = np.random.rand(50)
y = np.random.rand(50)
sizes = 1000 * x
plt.scatter(x, y, s=sizes)
plt.show()
运行上述代码,我们可以得到如下所示的散点图:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/97322/1643888244456-5baed919-04cc-42a2-ac42-2aa279e1bae0.png#clientId=u3d937365-6bc7-4&from=paste&height=200&id=u1e72f222&margin=%5Bobject%20Object%5D&name=image.png&originHeight=399&originWidth=398&originalType=binary&ratio=1&size=12254&status=done&style=none&taskId=u8cac4bd6-4ab0-478b-971b-abbf5e70a9a&width=199)
2.3 不同形状的标记
当我们想要在散点图中使用不同的标记形状时,可以将marker参数设置为一个形状代码。例如,以下代码创建一个散点图,在其中使用圆形、正方形和三角形标记:
x = np.random.rand(50)
y = np.random.rand(50)
markers = ['o', 's', '^']
for i in range(0, len(x)):
plt.scatter(x[i], y[i], marker=markers[i % 3])
plt.show()
运行上述代码,我们可以得到如下所示的散点图:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/97322/1643888244623-4956c75f-6e70-4995-a0f4-4bf9ff0ab4f5.png#clientId=u3d937365-6bc7-4&from=paste&height=199&id=u4f2d361e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=398&originWidth=397&originalType=binary&ratio=1&size=13505&status=done&style=none&taskId=ua3143aa6-fe42-4ea1-b7eb-d4b67f95034&width=199)
2.4 更复杂的数据
当我们面对更复杂的数据时,我们可以使用scatter函数创建更多样化的散点图。例如,以下代码演示了如何使用scatter函数创建一个囊括蒙太奇运动的散点图:
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
x, y = np.random.rand(2, 50)
colors = np.random.rand(50)
sizes = 500 * np.random.rand(50)
def update(frame):
x, y = np.random.rand(2, 50)
colors = np.random.rand(50)
sizes = 500 * np.random.rand(50)
ax.clear()
ax.scatter(x, y, c=colors, s=sizes)
ax.set_xlim([0, 1])
ax.set_ylim([0, 1])
ani = FuncAnimation(fig, update, frames=range(1, 100), repeat=True)
plt.show()
运行上述代码,我们将获得一个动画散点图,随着时间的推移,不停地重新绘制:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/97322/1643888244766-7fe68c49-8f33-457d-8eb5-91bac454052a.png#clientId=u3d937365-6bc7-4&from=paste&height=321&id=u1d27fd15&margin=%5Bobject%20Object%5D&name=image.png&originHeight=640&originWidth=640&originalType=binary&ratio=1&size=165650&status=done&style=none&taskId=u7e8928f9-a95a-4c46-a00c-cfb8bce44d5&width=321)
3. 总结
在本文中,我们详细介绍了Python scatter函数的用法,并展示了一些示例来展示如何在散点图中添加颜色、大小和形状信息,以及如何处理更复杂的数据。希望这篇文章可以帮助初学者更好地理解scatter函数,并在数据可视化方面取得更好的效果。