📜  使用 Matplotlib 在Python中绘制多图

📅  最后修改于: 2022-05-13 01:54:46.955000             🧑  作者: Mango

使用 Matplotlib 在Python中绘制多图

Matplotlib是一个Python库,可用于绘制图形和图形。

通常需要绘制多图或多图来比较两条曲线或显示多图中的一些渐变,这可以使用子图来完成。子图是尝试在同一图中绘制多个图形/图形/图时要理解的最重要和基本的概念之一,本教程将向您展示它是如何完成的。

subplot ()函数可以在 matplotlib 的 pyplot 模块中找到,它为Python中的绘图提供了一个类似 MATLAB 的框架。该函数的原型如下图所示:

matplotlib.pyplot.subplot(nrows, ncols, index)

还可以给出某些关键字参数。

堆积的地块

首先,让我们尝试通过将一个叠加在另一个上来绘制一系列图(此处为 3 个)。当我们堆叠它们时,变化的是行数 (nrows),这意味着 ncols 保持为 1。每个子图由 index 参数标识。

import matplotlib.pyplot as plt
import numpy as np
  
  
x = np.arange(0, 10, 0.01)
  
# notice that nrows = number
# of images
plt.subplot(3, 1, 1)
plt.plot(x, np.sin(x))
  
# ncols stays as 1 
plt.subplot(3, 1, 2)
plt.plot(x, np.cos(x))
  
# each image has a unique 
# index
plt.subplot(3, 1, 3)
plt.plot(x, x)
  
plt.show()

输出:
多图-python-matplotlib

网格图

接下来,我们将尝试将一些图形绘制为网格,即具有多列的多图。在这里,我们将创建一个包含 4 个图的多图,我们将其设为 2×2 网格,这意味着 nrows=2 和 ncols=2,每个图像再次由索引以优先顺序标识。

import matplotlib.pyplot as plt
import numpy as np
  
  
x = np.arange(0, 10, 0.01)
plt.subplot(2, 2, 1)
plt.plot(x, np.sin(x))
  
plt.subplot(2, 2, 2)
plt.plot(x, np.cos(x))
  
plt.subplot(2, 2, 3)
plt.plot(x, x)
  
plt.subplot(2, 2, 4)
plt.plot(x, 5-x)
  
plt.show()

输出:
多图-python-matplotlib

如果我们要创建一个多图,其中一个图重叠在另一个图上,就像我们最小化 youtube 视频时看到的那样,但它仍然在底角的一个小窗口中运行,那么add_suplplot()函数会有所帮助.

import matplotlib.pyplot as plt
import numpy as np
  
  
fig = plt.figure()
x = np.arange(0, 10, 0.01)
plt.plot(x, x-5)
  
plt.title("Not so Tiny")
fig.add_subplot(2, 2, 4)
plt.plot(x, 5-x)
  
plt.title("Tiny Plot")
plt.show()

输出:
多图-python-matplotlib

哦,而且,对于我们已经实现的所有 subplot 函数,如果 nrows、ncols 和 index 小于 10,而不是以 (nrows, ncols, index) 格式给出参数,它们可以作为格式为(nrows*100+ncols*10+index)的三位数字,并且输出将保持不变。为什么我们不用网格图试试呢?

import matplotlib.pyplot as plt
import numpy as np
  
  
x = np.arange(0, 10, 0.01)
plt.subplot(221)
plt.plot(x, np.sin(x))
  
plt.subplot(222)
plt.plot(x, np.cos(x))
  
plt.subplot(223)
plt.plot(x, x)
  
plt.subplot(224)
plt.plot(x, 5-x)
plt.show()

输出:
多图-python-matplotlib

即使我们使用三位数格式传递参数,输出仍然保持不变。