折线图与散点图
使用 ax.plot() 绘制连续数据,使用 ax.scatter() 绘制离散点,并控制颜色、标记和线型。
折线图与散点图 是 CoddyKit 上的免费 Pandas & NumPy Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Pandas & NumPy Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Pandas & NumPy Academy 课程共包含 4 节课。
线形图和散点图:核心图表类型
线形图用线连接按顺序排列的数据点,非常适合可视化随时间变化的趋势或连续函数。散点图绘制彼此不相连的独立点,非常适合探索两个数值变量之间的关系。二者都创建在 Matplotlib 的 Axes 对象上:线形图使用 ax.plot(),散点图使用 ax.scatter()。
使用 ax.plot() 绘制线形图
ax.plot(x, y) 会按顺序绘制连接数据点的线。将 x 值作为第一个参数,将 y 值作为第二个参数传入。二者都可以是 Python 列表、NumPy 数组或 Pandas Series。只传入一个参数时,Matplotlib 会自动使用索引(0、1、2、……)作为 x 轴。该方法返回一个 Line2D Artist 对象列表。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, y) # basic line plot
ax.set_title('Sine Wave')
ax.set_xlabel('x')
ax.set_ylabel('sin(x)')
# plt.show()
plt.close()控制线条样式和颜色
ax.plot() 最常用的关键字参数包括:color(名称、十六进制值或 RGB 元组)、linewidth(或 lw)、linestyle(或 ls):'-' 表示实线,'--' 表示虚线,':' 表示点线,'-.' 表示点划线;marker 表示每个数据点处的形状,markersize 表示标记大小。结合使用 linestyle 和 marker,可以同时显示线条和各个数据点。
fig, ax = plt.subplots(figsize=(7, 4))
# Solid blue line with circle markers
ax.plot(x, np.sin(x), color='steelblue', lw=2, ls='-',
marker='o', markersize=4, label='sin(x)')
# Dashed red line
ax.plot(x, np.cos(x), color='crimson', lw=1.5, ls='--', label='cos(x)')
ax.legend()
plt.close()绘制多条线
多次调用 ax.plot(),即可在同一个 Axes 上叠加多条线。Matplotlib 会自动循环使用默认的颜色调色板。请始终为每条线传入 label 关键字,这样 ax.legend() 就能自动为它们添加标签。请在所有绘图调用之后调用图例方法,以确保包含所有线条。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
dates = pd.date_range('2024-01', periods=12, freq='ME')
fig, ax = plt.subplots(figsize=(8, 4))
for product in ['A', 'B', 'C']:
sales = np.random.randint(50, 200, 12)
ax.plot(dates, sales, marker='o', label=f'Product {product}')
ax.set_title('Monthly Sales by Product')
ax.legend()
plt.close()直接绘制 Pandas DataFrames
Pandas DataFrames 提供了 .plot() 方法,可以直接创建 Matplotlib 图表。传入 ax=ax,即可在已有的 Axes 对象上绘图。df.plot(ax=ax) 会将所有列绘制为独立的线,并使用 DataFrame 索引作为 x 轴。之后,您仍然可以在 ax 对象上应用所有 Matplotlib 自定义设置。
df = pd.DataFrame(
np.random.randn(12, 3),
index=pd.date_range('2024', periods=12, freq='ME'),
columns=['North', 'South', 'West']
).cumsum()
fig, ax = plt.subplots(figsize=(8, 4))
df.plot(ax=ax, linewidth=1.5)
ax.set_title('Cumulative Revenue by Region')
ax.set_ylabel('Revenue (cumulative)')
plt.close()使用 ax.scatter() 绘制散点图
ax.scatter(x, y) 会绘制彼此不相连的独立点。与 ax.plot() 不同,散点图不会假定数据已经排序。主要参数包括:c(颜色,可以是用于设置每个点颜色的数组)、s(点的大小,也可以是数组)、cmap(当 c 为数值时使用的颜色映射)和 alpha(取值 0 到 1 的透明度,用于处理点重叠问题)。
np.random.seed(42)
x = np.random.randn(100)
y = 2 * x + np.random.randn(100)
fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, color='steelblue', alpha=0.6, s=40)
ax.set_xlabel('Feature X')
ax.set_ylabel('Target Y')
ax.set_title('Feature vs Target')
plt.close()按类别为散点设置颜色
将数值数组传递给 c 参数,并传入 cmap 颜色映射,即可根据第三个变量为散点设置颜色。使用 plt.colorbar(scatter_obj) 添加颜色条,以提供数值刻度。当 s(大小)参数也随第四个变量变化时,这种技术称为气泡图变体。
categories = np.random.choice([0, 1, 2], size=100)
fig, ax = plt.subplots(figsize=(6, 5))
scatter = ax.scatter(x, y, c=categories, cmap='Set1',
alpha=0.7, s=60, edgecolors='none')
fig.colorbar(scatter, ax=ax, label='Category')
ax.set_title('Scatter Coloured by Category')
plt.close()添加趋势线
带有拟合趋势线的散点图可以同时展示各个数据点和整体规律。使用 np.polyfit(x, y, 1) 计算线性拟合结果,使用 np.poly1d(coeffs)(x_range) 对其求值,然后在散点图上方使用 ax.plot() 叠加结果。趋势线应比数据点更细,并采用不同的样式,以便与数据点区分开来。
fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, alpha=0.4, s=30, color='steelblue', label='Data')
# Fit and plot linear trend line
coeffs = np.polyfit(x, y, 1)
x_line = np.linspace(x.min(), x.max(), 100)
y_line = np.poly1d(coeffs)(x_line)
ax.plot(x_line, y_line, color='red', lw=2, label='Linear fit')
ax.legend()
ax.set_title('Scatter with Trend Line')
plt.close()使用 fill_between() 填充置信带
ax.fill_between(x, y_lower, y_upper) 会填充两条曲线之间的区域。它通常用于显示均值线周围的置信区间、标准差带或最小值/最大值范围。传入 alpha 使填充区域半透明,从而保持底层数据可见。
x_range = np.linspace(0, 2 * np.pi, 100)
mean = np.sin(x_range)
upper = mean + 0.2
lower = mean - 0.2
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x_range, mean, color='steelblue', lw=2, label='Mean')
ax.fill_between(x_range, lower, upper,
color='steelblue', alpha=0.2, label='±0.2 band')
ax.legend()
ax.set_title('Line with Confidence Band')
plt.close()坐标轴范围和网格线
使用 ax.set_xlim(min, max) 和 ax.set_ylim(min, max) 控制可见范围。使用 ax.grid(True) 启用网格线。您可以通过关键字参数 linestyle、linewidth 和 alpha 自定义网格。设置 alpha=0.3 的浅色网格有助于读取准确数值,同时不会让图表显得杂乱。调用 ax.set_axisbelow(True),可将网格绘制在数据点下方。
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, np.sin(x), 'b-', lw=2)
ax.set_xlim(0, 2 * np.pi)
ax.set_ylim(-1.2, 1.2)
ax.grid(True, linestyle='--', alpha=0.5)
ax.set_axisbelow(True) # grid behind data
ax.set_title('Sine with Grid')
plt.close()Alpha 和点重叠
当散点图中许多数据点重叠在同一区域时,单个点会变得不可见——这称为点重叠。最简单的解决方法是使用 alpha 降低不透明度(0.0 表示完全透明,1.0 表示完全不透明)。将 alpha 设置为 0.3 或更低,这样密集区域会显得更暗(因为多个半透明点叠加在一起),而稀疏区域仍保持较浅的颜色。对于非常大的数据集(数百万个点),可以考虑使用六边形分箱图或核密度估计。
np.random.seed(1)
x_dense = np.random.randn(1000)
y_dense = np.random.randn(1000)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))
# Without alpha: overplotting hides density
ax1.scatter(x_dense, y_dense, s=10)
ax1.set_title('No alpha (overplotted)')
# With alpha: density visible
ax2.scatter(x_dense, y_dense, s=10, alpha=0.2)
ax2.set_title('alpha=0.2 (density visible)')
plt.tight_layout()
plt.close()快速检查
请检验您对本课 Matplotlib 线形图和散点图的理解。
课程回顾
在本课中,您学习了:ax.plot() 可以创建线形图,并全面控制颜色、线条样式和标记;ax.scatter() 可以创建散点图,并通过 c 和 s 设置每个点的颜色和大小;ax.fill_between() 可以添加置信带;ax.grid() 可以添加网格线,提高可读性。接下来,我们将创建条形图和直方图,以可视化分类数据和分布数据。
用 AI 导师学习 Python — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「折线图与散点图」课时是免费的吗?
是的 — 「折线图与散点图」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Pandas & NumPy Academy 课程的其余内容,请升级到 CoddyKit PRO。 Pandas & NumPy Academy 课程共包含 4 节课。
「折线图与散点图」这节课中我会学到什么?
使用 ax.plot() 绘制连续数据,使用 ax.scatter() 绘制离散点,并控制颜色、标记和线型。 你通过在浏览器中直接运行的动手代码来练习 Pandas & NumPy Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Pandas & NumPy Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Pandas & NumPy Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「折线图与散点图」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Pandas & NumPy Academy 课中编写并运行代码吗?
能。每节 Pandas & NumPy Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 图形与坐标轴架构
- 折线图与散点图
- 条形图与直方图
- 标签、标题与保存图形