什么是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()
提示: 在这个例子中,我们同时展示了四个维度的数据:x轴位置、y轴位置、点的大小和点的颜色。这种多维数据展示方式是散点图的强大之处。

分类数据散点图

# 分类数据示例
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()函数的使用,将大大提升您的数据分析和可视化能力!