Matplotlib 是一个用于在 Python 中创建二维图表的库。为了更好地理解和使用 Matplotlib,重要的是要了解其三层结构:容器层(Container Layer)、辅助显示层(Helper Layer)和图像层(Artist Layer)。这些层级构成了 Matplotlib 的绘图体系结构。
1)容器层(Container Layer)
组件 | 描述 |
FigureCanvas | 最底层的容器, 代表了绘图的整个窗口或页面。 它是一个用于绘制 和渲染所有图表元素的物理或概念性的画布。 |
Figure | 代表了绘图窗口的顶层容器。 一个 Figure 可以包含多个 Axes 对象。 |
Axes | 是一个包含图表大部分元素的容器, 如线条、标记、文字、标签等, 通常与“坐标轴”相关联。 一个 Axes 对象代表了图表的一个绘图区域。 |
2) 辅助显示层(Helper Layer)
辅助显示层是对容器层的补充,提供了一系列方便的方法来创建常见的图表(如直方图、折线图等),并处理诸如刻度定位、布局和颜色映射等常见情况。
组件 | 描述 |
pyplot 模块 | 是 Matplotlib 的辅助显示层, 提供了一组命令式函数来快速生成简单图表。 例如, |
Axis 和 Tick 对象 | Axis 对象处理刻度线、网格线、标签等, 而 Tick 对象是 Axis 的组件, 用于处理刻度线和刻度标签。 |
3)图像层(Artist Layer)
图像层是 Matplotlib 的核心层,包含了用于绘制图表的所有对象(称为艺术家对象,或简称“艺术家”)。
组件 | 描述 |
Artist | 包括 Text(文本),Line2D(线条) ,Rectangle(矩形,用于绘制柱状图)、AxesImage(图像)等。 这些对象知道如何使用渲染器在画布上绘制自己。 |
Renderer | 负责在 FigureCanvas 上绘制 Artist。 用户通常不直接与渲染器交互, 而是通过艺术家对象的方法间接进行。 |
Matplotlib 中,画布是指整个图形界面或图形的总体背景,通常在绘图之前设置。在 Matplotlib 中,画布由 Figure 对象表示。可以通过调整 Figure 对象的属性来自定义画布的大小、分辨率和边框等。plt.figure()
?函数用于创建新的图形窗口,并提供了许多用于自定义这些图形窗口的参数。常用参数如下,
参数 | 描述 |
figsize | 图形的大小,以英寸为单位, 传递一个元组(宽度,高度)。 |
dpi | 图形的分辨率, 以每英寸点数(dots per inch)表示。 |
facecolor | 图形的背景颜色。 |
edgecolor | 图形边框的颜色。 |
frameon | 布尔值,用于控制是否绘制图形边框。 |
num | 图形的编号或名称。如果编号已存在, 则使用已存在的图形。 |
tight_layout | 布尔值或字典。如果为 True, 则使用 tight layout 调整子图布局以适应图形区域。 |
?使用示例:Python Matplotlib 实现基础绘图-CJavaPy
折线图是最基本的图表类型,通常用于显示随时间变化的数据。plt.plot()?
函数是用于创建线图的基本工具。常用参数如下,
参数 | 描述 |
x | 线图中点的 x 坐标。 |
y | 线图中点的 y 坐标。 |
color | 线条的颜色,可为颜色代码或颜色名称。 |
linestyle | 线条的样式,例如 '-', '--', '-.', ':' 等。 |
linewidth | 线条的宽度。 |
marker | 数据点的标记样式,例如 'o', '*', '+' 等。 |
markersize | 标记的大小。 |
label | 用于图例的标签。 |
alpha | 线条的透明度,范围? |
使用示例:
import matplotlib.pyplot as plt # 示例数据 x = range(1, 6) y = [1, 4, 6, 8, 4] # 创建线图 plt.plot(x, y, color='green', linestyle='--', linewidth=2, marker='o', markersize=10, label='Data Line', alpha=0.7) # 添加图例 plt.legend() # 添加标题和轴标签 plt.title('Line Plot Example') plt.xlabel('X-axis') plt.ylabel('Y-axis') # 显示图表 plt.show()
散点图通常用于显示两个变量之间的关系。plt.scatter()
?函数用于创建散点图,是数据可视化中常用的一个工具。常用参数如下,
参数 | 描述 |
x | 散点的 x 坐标。 |
y | 散点的 y 坐标。 |
s | 散点的大小,可以是单个数值或与数据点数量相等的数组。 |
c | 散点的颜色,可以是单个颜色格式的字符串或一系列颜色。 |
marker | 标记的样式,默认为 'o'。 |
alpha | 散点的透明度,介于 0(完全透明)和 1(完全不透明)之间。 |
linewidths | 标记边缘的线宽。 |
edgecolors | 标记边缘的颜色。 |
label | 用于图例的标签。 |
使用示例:
import matplotlib.pyplot as plt # 示例数据 x = [5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6] y = [99, 86, 87, 88, 100, 86, 103, 87, 94, 78, 77, 85, 86] sizes = [210, 410, 312, 214, 415, 312, 213, 210, 410, 312, 214, 415, 312] colors = ['red', 'green', 'blue', 'yellow', 'pink', 'black', 'orange', 'purple', 'beige', 'brown', 'gray', 'cyan', 'magenta'] # 创建散点图 plt.scatter(x, y, s=sizes, c=colors, marker='o', alpha=0.5, linewidths=2, edgecolors='w', label='Data Points') # 添加图例 plt.legend() # 添加标题和轴标签 plt.title('Custom Scatter Plot') plt.xlabel('X-axis') plt.ylabel('Y-axis') # 显示图表 plt.show()
条形图用于比较不同类别的数据。Matplotlib 库中,plt.bar()
?函数是用于创建条形图的常用函数。
常用参数如下,
参数 | 描述 |
x | 条形的 x 坐标。 |
height | 条形的高度。 |
width | 条形的宽度,默认值为 0.8。 |
bottom | 条形的起始位置 y 坐标,默认为 None。 |
align | 条形的对齐方式,'center' 或 'edge', 默认为 'center'。 |
color | 条形的颜色。 |
edgecolor | 条形边缘的颜色。 |
linewidth | 条形边缘的线宽。 |
tick_label | 用作条形标签的标签序列。 |
label | 用于为条形图添加图例的标签。 |
使用示例:
import matplotlib.pyplot as plt # 示例数据 categories = ['Category A', 'Category B', 'Category C', 'Category D'] values = [10, 15, 7, 12] # 创建条形图 plt.bar(x=categories, # x 坐标 height=values, # 条形的高度 width=0.6, # 条形的宽度 bottom=0, # 条形的起始位置 y 坐标 align='center', # 条形的对齐方式 color='blue', # 条形的颜色 edgecolor='black', # 条形边缘的颜色 linewidth=1, # 条形边缘的线宽 tick_label=categories, # 条形标签 label='Value') # 图例标签 # 添加 x 轴和 y 轴标签 plt.xlabel('Categories') plt.ylabel('Values') # 添加图表标题 plt.title('Bar Chart Example') # 显示图例 plt.legend() # 显示图表 plt.show()
可以添加更多元素来改进图表,例如图例、网格线和不同的样式。
import matplotlib.pyplot as plt import numpy as np # 准备数据 x = np.linspace(0, 10, 100) y = np.sin(x) # 绘制基础图形 plt.figure(figsize=(10, 6)) plt.plot(x, y, label='sin(x)') # 添加标题和标签 plt.title("Simple Plot of sin(x)") # 添加标题 plt.xlabel("x") # x轴标签 plt.ylabel("sin(x)") # y轴标签 # 添加图例 plt.legend() # 添加网格 plt.grid(True) # 添加注释 plt.annotate('Local Max', xy=(1.57, 1), xytext=(2, 1.5), arrowprops=dict(facecolor='black', shrink=0.05)) # 使用 plt.draw() 显示画布 plt.draw() # 显示图形 plt.show()
Matplotlib 中,保存图形到文件是一个简单的过程。可以使用?savefig()
?方法来保存图形。常用参数如下,
参数 | 描述 |
fname | 输出文件的名称。字符串、类路径对象或类二进制对象。必备参数。 |
format | 输出格式。字符串, 支持的格式为eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff。 默认值为None。 |
dpi | 输出图像的分辨率(每英寸的像素点数)。 浮点数或'figure',如果值为'figure',输出使用图形的分辨率, 默认值为rcParams["savefig.dpi"](默认为'figure')。 |
quality | jpg文件输出的质量,仅对'jpg'或'jpeg'文件生效。整数, 建议取值范围为[1-95],值超过100将会禁用jpeg压缩算法, 可能会导致文件过大。默认值为rcParams["savefig.jpeg_quality"] (默认值为95)。 |
facecolor | 图像的背景色。颜色值或'auto',值为'auto'时, 使用当前图形的背景色。 默认值为rcParams["savefig.facecolor"](即'auto')。 |
edgecolor | 图像边缘颜色。颜色值或'auto', 值为'auto'时,使用当前图形边缘颜色。 默认值为rcParams["savefig.edgecolor"](即'auto')。 |
orientation | postscript后端参数。 取值范围为{'landscape', 'portrait'}。 默认值为'portrait'。 |
papertype | 纸张大小,仅支持postscript输出。 取值范围为{'letter', 'legal', 'executive', 'ledger', 'a0' - 'a10', 'b0' - 'b10'}。 默认值为None。 |
backend | 使用非默认后端渲染文件。字符串。 可选参数。默认值为None。 |
metadata | 用于存储图像元数据的键值对。 字典,取值依赖于输出图像格式和后端。 可选参数。默认值为None。 |
pil_kwargs | 保存图像是传递给PIL.Image.Image.save的参数。 字典。可选参数。 |