什么是scatter()函数?
scatter() 是matplotlib.pyplot模块中的一个函数,用于创建散点图。散点图是数据可视化中最常用的图表类型之一,用于展示两个变量之间的关系,观察数据的分布模式、聚类和异常值。
与plot()函数不同,scatter()专门用于绘制散点图,提供了更多自定义选项,如点的大小、颜色、透明度等,能够更丰富地展示多维数据信息。
scatter()函数基本语法
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, alpha=None,
linewidths=None, edgecolors=None, **kwargs)
主要参数详解
| 参数 | 说明 | 默认值 |
|---|---|---|
| x, y | 数据点的x坐标和y坐标(数组形式) | 必填参数 |
| s | 点的大小(以点为单位),可以是标量或与x,y长度相同的数组 | None (使用默认大小) |
| c | 点的颜色,可以是单一颜色、颜色序列或使用cmap的颜色值数组 | None (使用默认颜色) |
| marker | 点的标记样式(如'o', 's', '^', 'D'等) | 'o' (圆形) |
| alpha | 点的透明度(0-1之间) | None (不透明) |
| linewidths | 标记边缘的线宽 | None |
| edgecolors | 标记边缘的颜色 | None |
| cmap | 当c是数值数组时使用的颜色映射 | None |
scatter()函数使用示例
基本散点图
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
x = np.random.rand(50)
y = np.random.rand(50)
plt.scatter(x, y)
plt.title('基本散点图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
最简单的散点图,展示随机数据点的分布情况。
使用不同点的大小和透明度,使图表更具表现力。
多维度数据可视化
# 创建多维数据
np.random.seed(42)
x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)
sizes = 500 * np.random.rand(100)
plt.scatter(x, y, s=sizes, c=colors, alpha=0.6,
cmap='viridis', edgecolor='black')
plt.colorbar(label='颜色值')
plt.title('多维数据散点图')
plt.xlabel('X值')
plt.ylabel('Y值')
plt.show()
分类数据散点图
# 分类数据示例
categories = np.random.choice(['A', 'B', 'C'], 100)
x = np.random.randn(100)
y = np.random.randn(100)
# 为不同类别分配不同颜色和标记
colors = {'A': 'red', 'B': 'green', 'C': 'blue'}
markers = {'A': 'o', 'B': 's', 'C': '^'}
for cat in set(categories):
idx = categories == cat
plt.scatter(x[idx], y[idx], color=colors[cat],
marker=markers[cat], label=cat,
alpha=0.7, edgecolors='black')
plt.legend(title='类别')
plt.title('分类数据散点图')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.grid(alpha=0.2)
plt.show()
scatter()函数的高级应用
气泡图
通过设置点的大小(s参数)来表示第三维数据,创建气泡图:
# 气泡图示例
countries = ['USA', 'China', 'Japan', 'Germany', 'India']
gdp = [21.4, 14.3, 5.1, 3.9, 2.9] # 万亿美元
growth = [2.3, 6.1, 1.7, 2.5, 7.4] # 增长率%
population = [328, 1400, 126, 83, 1380] # 百万
plt.figure(figsize=(10, 6))
plt.scatter(gdp, growth, s=np.array(population)*0.2,
alpha=0.6, c=range(len(countries)),
cmap='tab10', edgecolors='black')
# 添加标签
for i, country in enumerate(countries):
plt.annotate(country, (gdp[i], growth[i]),
xytext=(5, 5), textcoords='offset points')
plt.title('国家经济气泡图')
plt.xlabel('GDP (万亿美元)')
plt.ylabel('增长率 (%)')
plt.colorbar(label='国家索引')
plt.grid(alpha=0.3)
plt.show()
动态散点图
结合matplotlib的动画功能创建动态散点图:
from matplotlib.animation import FuncAnimation
import matplotlib.animation as animation
fig, ax = plt.subplots(figsize=(8, 6))
x = np.random.rand(50)
y = np.random.rand(50)
scatter = ax.scatter(x, y, c='blue', alpha=0.7)
def update(frame):
# 更新数据点位置
new_x = x + 0.1 * np.sin(frame * 0.1)
new_y = y + 0.1 * np.cos(frame * 0.1)
scatter.set_offsets(np.c_[new_x, new_y])
# 更新颜色
colors = np.random.rand(50)
scatter.set_array(colors)
return scatter,
ani = FuncAnimation(fig, update, frames=100,
interval=50, blit=True)
plt.title('动态散点图')
plt.show()
总结
matplotlib.pyplot.scatter()函数是Python数据可视化中不可或缺的工具,尤其适合展示两个变量之间的关系以及多维数据的分布情况。
通过灵活运用s(大小)、c(颜色)、marker(标记样式)、alpha(透明度)等参数,您可以创建出信息丰富且视觉效果出色的散点图。
掌握scatter()函数的使用,将大大提升您的数据分析和可视化能力!
发表评论