【python 第三方库】matplotlib

2024-01-25 00:00:00

目录:

matplotlib 模块介绍

Matplotlib 由 John Hunter 于 2003 年创建,遵循 PSF/BSD 开源协议,提供了类似 MATLAB 的绘图接口,能够生成出版级质量的静态、动态及交互式图表,支持多种硬拷贝格式输出。

Matplotlib绘图遵循一个清晰的流程:创建画布 → 创建/选定子图 → 绘制图形 → 添加装饰元素 → 显示或保存。

安装模块:

$ pip3 install matplotlib

折线图

折线图用于展示数据的连续变化趋势。

plt.plot() 是绘制折线图的核心函数,可通过 color、linestyle、linewidth、marker 等参数自定义线条样式。
图例可通过在 plot() 中设置 label 参数,再调用 plt.legend() 显示。

import matplotlib.pyplot as plt

# 生成数据
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [x ** 2 for x in x]

# 绘制折线图
plt.plot(x, y, color='blue', linewidth=2.5, linestyle='-', label='y = x^2')

# 添加装饰
plt.title('Square Curve')  # 标题
plt.xlabel('x-axis')       # X 轴标签
plt.ylabel('y-axis')       # Y 轴标签
plt.grid(True)             # 显示网格线
plt.legend()               # 显示图例

# 显示图形
plt.show()

柱状图

柱状图用于比较不同类别的数据值。

import matplotlib.pyplot as plt

# 生成数据
categories = ['A', 'B', 'C', 'D']
values = [5, 7, 3, 8]

# 绘制柱状图
plt.bar(categories, values, color='skyblue')

# 添加装饰
plt.title('Simple Bar Chart')
plt.xlabel('Categories')
plt.ylabel('Values')

# 显示图形
plt.show()

饼图

饼图用于显示各部分占整体的比例。

import matplotlib.pyplot as plt

# 生成数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]

# 绘制饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)

# 添加装饰
plt.title('Pie Chart')
plt.axis('equal')  # 确保饼图是圆形

# 显示图形
plt.show()

散点图

散点图用于展示两个变量之间的关系或分布。

plt.scatter() 函数功能强大,可以通过颜色(c)和大小(s)映射第三个甚至第四个变量,丰富信息维度。

import matplotlib.pyplot as plt
import random

# 生成随机数据
n = 1024
X = [random.random() for _ in range(n)]
Y = [random.random() for _ in range(n)]

# 绘制散点图
plt.scatter(X, Y, s=75, c=X, alpha=0.5) # s: 点大小, c: 颜色序列, alpha: 透明度

# 添加装饰
plt.title('Scatter Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 显示图形
plt.show()

创建多个子图

import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8)) # 2 行 2 列,共 4 个子图
x = np.linspace(0, 2*np.pi, 100)

axes[0, 0].plot(x, np.sin(x))
axes[0, 0].set_title('Sin(x)')

axes[0, 1].plot(x, np.cos(x), 'r--')
axes[0, 1].set_title('Cos(x)')

axes[1, 0].scatter(x, np.tan(x))
axes[1, 0].set_title('Tan(x) Scatter')

axes[1, 1].hist(np.sin(x), bins=20)
axes[1, 1].set_title('Sin(x) Distribution')

plt.tight_layout() # 自动调整子图间距

plt.show()

保存图片

使用 plt.savefig() 可以将图形保存为 PNG、PDF、SVG 等多种格式。

import matplotlib.pyplot as plt

# 生成数据
categories = ['A', 'B', 'C', 'D']
values = [5, 7, 3, 8]

# 绘制柱状图
plt.bar(categories, values, color='skyblue')

# 添加装饰
plt.title('Simple Bar Chart')
plt.xlabel('Categories')
plt.ylabel('Values')

# 保存图片
plt.savefig('test.png', dpi=300, bbox_inches='tight')

中文处理

matplotlib 默认使用英文字体,中文字体需要额外设置。

import matplotlib.pyplot as plt

# 设置字体,可以尝试列表中的多个,系统会按顺序查找第一个可用的
plt.rcParams['font.sans-serif'] = ['Heiti TC', 'Hiragino Sans GB', 'PingFang SC', 'Arial Unicode MS']
# 必须设置此项以正常显示负号(-)
plt.rcParams['axes.unicode_minus'] = False

# 示例绘图
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('中文标题示例')
plt.xlabel('X轴标签')
plt.ylabel('Y轴标签')
plt.show()

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: