什么是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()函数的使用,将大大提升您的数据分析和可视化能力!
发表评论