【matplotlib基础】--子图

matplotlib,基础 · 浏览次数 : 102

小编点评

**使用 Matplotlib绘制子图的常用方式和技巧** **1. 添加子图的方式** * **函数式风格:** ```python import numpy as np import matplotlib import matplotlib import matplotlib.pyplot as plt fig, ax = plt.subplots(211) # 2行1列的第一个y = np.random.randint(1, 100, 8)plt.plot(x, y) fig.add_subplot(212) # 2行1列的第二个y = np.random.randint(1, 100, 8)plt.plot(x, y) ``` * **面向对象风格:** ```python x = np.array(range(0, 8)) fig, ax = plt.subplots(1, 2) # 设置子图1行2列y = np.random.randint(1, 100, 8)ax[0].plot(x, y) y = np.random.randint(1, 100, 8) ax[1].plot(x, y) ``` **2. 子图的布局** * 设置子图的布局通过行列设置: ```python rows, cols = 2, 2 # 2行2列,4个子图 fig, ax = plt.subplots(rows, cols) ``` * 设置子图的布局通过 `sharey='all'` 属性: ```python fig, ax = plt.subplots(rows, cols, sharey='all') ``` **3. 复杂的布局** * 使用 `GridSpec` 设置不规则的网格: ```python rows, cols = 3, 3grid = plt.GridSpec(rows, cols) plt.subplot(grid[0, :2])plt.subplot(grid[0, 2])plt.subplot(grid[1, 0])plt.subplot(grid[1, 1:])plt.subplot(grid[2, :]) ``` **4. 总结** * Matplotlib 中每个子图可以有自己的标签、大小、位置和样式,可以方便地组合成一个复杂的图形。 * 我们一般在以下场景中使用子图: * 数据可视化 * 图表组合 * 数据分析

正文

使用Matplotlib对分析结果可视化时,比较各类分析结果是常见的场景。
在这类场景之下,将多个分析结果绘制在一张图上,可以帮助用户方便地组合和分析多个数据集,提高数据可视化的效率和准确性。

本篇介绍Matplotlib绘制子图的常用方式和技巧。

1. 添加子图的方式

添加子图主要有两种方式,
一种是函数式风格:(也就是上一篇画布中介绍的方式)

import numpy as np

import matplotlib
import matplotlib.pyplot as plt

%matplotlib inline

x = np.array(range(0, 8))

fig = plt.figure(figsize=[6,4])
fig.add_subplot(211) # 2行1列的第一个
y = np.random.randint(1, 100, 8)
plt.plot(x, y)

fig.add_subplot(212) # 2行1列的第二个
y = np.random.randint(1, 100, 8)
plt.plot(x, y)

image.png

另一种是面向对象风格:(使用 Axes 对象)

x = np.array(range(0, 8))

fig, ax = plt.subplots(1, 2)  # 设置子图1行2列
y = np.random.randint(1, 100, 8)
ax[0].plot(x, y)

y = np.random.randint(1, 100, 8)
ax[1].plot(x, y)

image.png

上面设置好子图的布局之后,添加子图的顺序是从上到下,从左到右。

2. 子图的布局

子图的布局是按照行列设置的,设置之后,相应的位置可以添加子图。

x = np.array(range(0, 8))
rows, cols = 2, 2  # 2行2列,4个子图
fig, ax = plt.subplots(rows, cols)

for i in range(rows):
    for j in range(cols):
        y = np.random.randint(1, 100, 8)
        ax[i, j].plot(x, y) # i,j定位子图的位置

image.png
子图按照网格布局时,我们看到上面4个子图的Y轴刻度不一样,这样不利于比较。

x = np.array(range(0, 8))
rows, cols = 2, 2  # 2行2列,4个子图
fig, ax = plt.subplots(rows, cols, sharey='all')

for i in range(rows):
    for j in range(cols):
        y = np.random.randint(1, 100, 8)
        ax[i, j].plot(x, y) # i,j定位子图的位置

image.png
设置 sharey='all'之后,Y轴刻度保持一致,这样比较曲线才有意义。
上面的示例中 X轴刻度是一致的,如果不一致,可以用 sharex 属性来设置。

3. 复杂的布局

3.1. 不规则的网格

除了规则的网格布局,还可以通过 GridSpec 设置不规则的网格。
比如:

rows, cols = 3, 3
grid = plt.GridSpec(rows, cols)

plt.subplot(grid[0, :2])
plt.subplot(grid[0, 2])

plt.subplot(grid[1, 0])
plt.subplot(grid[1, 1:])

plt.subplot(grid[2, :])

image.png
上例中设置了3行3列的网格,但是不是每个图形占用几个网格是可以调整的。

3.2. 嵌套图形

除了网格,还可以通过相对定位的方式来绘制多个子图。

fig = plt.figure()

fig.add_axes([0.1, 0.1, 1, 1])
fig.add_axes([0.3, 0.3, 0.3, 0.3])
fig.add_axes([0.7, 0.6, 0.3, 0.2])

image.png
上面按相对位置添加子图的函数 add_axes的参数是一个4元列表
这个列表4个元素的含义:

  1. 第一个元素表示子图左下角距离画布左边的距离占画布总宽度的比例
  2. 第二个元素表示子图左下角距离画布底边的距离占画布总高度的比例
  3. 第三个元素表示子图宽度占画布总宽度的比例
  4. 第三个元素表示子图高度占画布总高度的比例

注意,这里的4个值都是比例

4. 总结回顾

Matplotlib 中的每个子图可以有自己的标签、大小、位置和样式,可以方便地组合成一个复杂的图形。
我们一般在下列场景中使用子图:

  1. 数据可视化:将多个数据集在同一张图中显示,进行对比和分析。
  2. 图表组合:将多个图表组合在一起,形成一个综合性的图形。
  3. 数据分析:将多个数据集在同一张图中显示,进行筛选和筛选。
  4. 可视化规范化:将多个来源不同的数据集在同一张图中显示,保证图形的一致性和准确性。

与【matplotlib基础】--子图相似的内容:

【matplotlib基础】--子图

使用Matplotlib对分析结果可视化时,比较各类分析结果是常见的场景。在这类场景之下,将多个分析结果绘制在一张图上,可以帮助用户方便地组合和分析多个数据集,提高数据可视化的效率和准确性。 本篇介绍Matplotlib绘制子图的常用方式和技巧。 1. 添加子图的方式 添加子图主要有两种方式,一种是

【matplotlib基础】--图例

Matplotlib 中的图例是帮助观察者理解图像数据的重要工具。图例通常包含在图像中,用于解释不同的颜色、形状、标签和其他元素。 1. 主要参数 当不设置图例的参数时,默认的图例是这样的。 import numpy as np import matplotlib.pyplot as plt x =

【matplotlib基础】--3D图形

matplotlib 在1.0版本之前其实是不支持3D图形绘制的。 后来的版本中,matplotlib加入了3D图形的支持,不仅仅是为了使数据的展示更加生动和有趣。更重要的是,由于多了一个维度,扩展了其展示数据分布和关系的能力,可以一次从三个维度来比较数据。 下面介绍在matplotlib中绘制各类

【matplotlib基础】--几何图形

除了绘制各类分析图形(比如柱状图,折线图,饼图等等)以外,matplotlib 也可以在画布上任意绘制各类几何图形。这对于计算机图形学、几何算法和计算机辅助设计等领域非常重要。 matplitlib 中的 patches 类提供了丰富的几何对象,本篇抛砖引玉,介绍其中几种常用的几何图形绘制方法。 其

【matplotlib基础】--文本标注

Matplotlib 文本和标注可以为数据和图形之间提供额外的信息,帮助观察者更好地理解数据和图形的含义。 文本用于在图形中添加注释或提供更详细的信息,以帮助观察者理解图形的含义。标注则是一种更加细粒度的文本信息,可以被用来为特定的数据点或区域提供更详细的信息。 本篇通过示例依次介绍文本和标注的常用

【matplotlib基础】--坐标轴

Matplotlib的坐标轴是用于在绘图中表示数据的位置的工具。 坐标轴是图像中的水平和垂直线,它们通常表示为 x 轴和 y 轴。坐标轴的作用是帮助观察者了解图像中数据的位置和大小,通常标有数字或标签,以指示特定的值在图像中的位置。 1. 坐标轴范围 Matplotlib绘制图形时,会自动根据X,Y

【matplotlib基础】--绘图配置

Matplotlib 提供了大量配置参数,这些参数可以但不限于让我们从整体上调整通过 Matplotlib 绘制的图形样式,这里面的参数还有很多是功能性的,和其他工具结合时需要用的配置。 通过plt.rcParams,可以查看所有的配置信息: import matplotlib.pyplot as

【matplotlib基础】--动画

matplotlib的动画一直是一个强大但使用频率不高的功能,究其原因,一方面展示动画需要一定的媒介,没有图形和文字展示方便;二来大家更关心的是分析结果的最终图表,图表的动态展示则没有那么重要。 不过,随着短视频的兴起,在短视频平台上展示动画变得非常容易,所以,我们发现有越来越多的数据分析动画(比如

【matplotlib基础】--画布

Matplotlib 库是一个用于数据可视化和绘图的 Python 库。它提供了大量的函数和类,可以帮助用户轻松地创建各种类型的图表,包括直方图、箱形图、散点图、饼图、条形图和密度图等。 使用 Matplotlib 的过程中,遇到的难点并不在于绘制各类的图形,因为每种图形都有其对应的API。难点在于

【matplotlib基础】--结合地图

如果分析的数据与地域相关,那么,把分析结果结合地图一起展示的话,会让可视化的效果得到极大的提升。 比如,分析各省GDP数据,人口数据,用柱状图,饼图之类的虽然都可以展示分析结果,不过,如果能在全国的地图上展示各省的分析结果的话,会让人留下更加深刻的印象。 将数据的分析结果展示在地图上,难点在于: 如