基本绘图:折线图

折线图是最常用的数据可视化图表之一,用于展示数据随时间或有序类别变化的趋势。 Matplotlib 中通过 plt.plot() 函数可以快速绘制美观的折线图。

📈 1. 最简单的折线图

直接传入 x 和 y 轴的数据即可绘制一条折线:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.plot(x, y)
plt.title('基本折线图')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.show()
✔️ 这是最简单的折线图,默认使用蓝色实线。

🎨 2. 定制线条样式

plot() 函数支持许多参数来控制线条的外观:颜色、线型、标记等。常用的方式有两种:

  • 格式字符串:'ro--' 表示红色圆点虚线。
  • 显式参数: color, linestyle, marker 等。
参数说明常用值示例
colorc线条颜色'b' (蓝), 'g' (绿), 'r' (红), 'c' (青), 'm' (品红), 'y' (黄), 'k' (黑), 'w' (白) 或十六进制 '#ff0000'
linestylels线条样式'-' (实线), '--' (虚线), '-.' (点划线), ':' (点线)
marker数据点标记'.' (点), 'o' (圆圈), 's' (正方形), '*' (星号), '+' (加号), 'x' (叉号), 'D' (菱形)
linewidthlw线宽浮点数,默认1.5
markersizems标记大小浮点数
示例:定制样式
import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
y = [1, 4, 9, 16]

# 方式一:格式字符串
plt.plot(x, y, 'ro--')   # 红色圆圈虚线

# 方式二:显式参数(效果相同)
plt.plot(x, y, color='red', marker='o', linestyle='dashed', linewidth=2, markersize=8)

plt.title('定制线条样式')
plt.show()

📉 3. 绘制多条折线

多次调用 plot() 可以在同一坐标系中绘制多条折线:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) * np.cos(x)

plt.plot(x, y1, label='sin(x)', color='b', linestyle='-')
plt.plot(x, y2, label='cos(x)', color='r', linestyle='--')
plt.plot(x, y3, label='sin(x)cos(x)', color='g', linestyle=':')

plt.title('多条折线示例')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()  # 显示图例
plt.show()
✔️ 通过 label 参数指定图例名称,调用 legend() 显示图例。

⚙️ 4. 坐标轴设置

可以使用 xlim(), ylim() 设置坐标轴范围,xticks(), yticks() 设置刻度:

plt.plot([1,2,3,4], [1,4,9,16])

plt.xlim(0, 5)               # X轴范围 0~5
plt.ylim(0, 20)              # Y轴范围 0~20
plt.xticks([1,2,3,4], ['一','二','三','四'])  # 修改刻度标签
plt.yticks([0,5,10,15,20])

plt.title('坐标轴设置')
plt.show()

🔲 5. 添加网格线

使用 grid() 可以添加网格线,使数据更容易读取:

plt.plot([1,2,3,4], [1,4,9,16])
plt.grid(True)                 # 显示网格
# 或者定制网格样式
plt.grid(True, linestyle='--', color='gray', alpha=0.5)
plt.title('带网格的折线图')
plt.show()

🏆 6. 综合示例:股票价格走势

下面是一个模拟股票价格走势的折线图,综合了上述大部分功能:

import matplotlib.pyplot as plt
import numpy as np

# 生成模拟数据
days = np.arange(1, 31)
price_a = 100 + np.cumsum(np.random.randn(30))  # 随机游走
price_b = 100 + np.cumsum(np.random.randn(30))

# 绘制两条折线
plt.plot(days, price_a, 'b-o', label='股票 A', linewidth=2, markersize=4)
plt.plot(days, price_b, 'r--s', label='股票 B', linewidth=1.5, markersize=3)

# 标题和标签
plt.title('股票价格走势对比', fontsize=14)
plt.xlabel('交易日')
plt.ylabel('价格 (元)')

# 坐标轴范围
plt.xlim(0, 31)
plt.ylim(min(price_a.min(), price_b.min()) - 5, max(price_a.max(), price_b.max()) + 5)

# 网格
plt.grid(True, linestyle=':', alpha=0.7)

# 图例
plt.legend(loc='upper left')

# 添加注释(最高点)
max_idx = np.argmax(price_a)
plt.annotate(f'最高 {price_a[max_idx]:.1f}', xy=(days[max_idx], price_a[max_idx]),
             xytext=(days[max_idx]+2, price_a[max_idx]+2),
             arrowprops=dict(arrowstyle='->', color='blue'))

plt.tight_layout()
plt.show()
✔️ 包含了图例、网格、注释等多种元素。

💾 7. 保存为图片

使用 savefig() 代替 show() 即可保存:

plt.plot(x, y)
plt.title('保存示例')
plt.savefig('line_plot.png', dpi=300, bbox_inches='tight')  # 保存为PNG
# plt.savefig('line_plot.pdf')  # 保存为PDF矢量格式

折线图是 Matplotlib 中最基础但最强大的工具。掌握了本章内容,你就能应对大多数趋势展示需求。下一章我们将学习散点图的绘制。