subplot plt

subplot plt

参考:subplot plt

在使用Matplotlib绘制图形时,经常会用到subplot()函数和plt.subplots()函数来创建子图。子图可以帮助我们在同一个图像窗口中显示多个图形,方便比较和分析不同数据之间的关系。本文将详细介绍如何使用subplot plt来创建和管理子图。

创建单个子图

首先我们来看一下如何创建单个子图。使用subplot()函数可以指定子图的行数、列数和子图的索引位置来创建一个子图。

import matplotlib.pyplot as plt

# 创建一个2x2的子图,选择第一个子图
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.title('Subplot 1')

plt.show()

Output:

subplot plt

在上面的示例中,我们创建了一个2×2的子图,选择了第一个子图来显示一个简单的折线图,并设置了子图的标题为’Subplot 1’。

创建多个子图

除了创建单个子图外,我们还可以创建多个子图并在一个图像窗口中显示。使用plt.subplot()函数可以快速创建多个子图,使用plt.subplots()函数也可以实现相同的效果。

import matplotlib.pyplot as plt

# 使用subplot()函数创建多个子图
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.title('Subplot 1')

plt.subplot(2, 2, 2)
plt.bar(['A', 'B', 'C', 'D'], [10, 20, 15, 30])
plt.title('Subplot 2')

plt.subplot(2, 2, 3)
plt.scatter([1, 2, 3, 4], [10, 20, 15, 30])
plt.title('Subplot 3')

plt.subplot(2, 2, 4)
plt.pie([20, 30, 40, 10], labels=['A', 'B', 'C', 'D'])
plt.title('Subplot 4')

plt.show()

Output:

subplot plt

在上面的示例中,我们创建了一个2×2的子图,分别在四个子图中显示了折线图、柱状图、散点图和饼图,并设置了每个子图的标题。

使用plt.subplots()创建子图

除了使用plt.subplot()函数创建子图外,我们还可以使用plt.subplots()函数来实现相同的效果。plt.subplots()函数可以同时返回图像对象和子图对象,方便我们对子图进行管理。

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)

# 在第一个子图中显示折线图
axs[0, 0].plot([1, 2, 3, 4], [1, 4, 9, 16])
axs[0, 0].set_title('Subplot 1')

# 在第二个子图中显示柱状图
axs[0, 1].bar(['A', 'B', 'C', 'D'], [10, 20, 15, 30])
axs[0, 1].set_title('Subplot 2')

# 在第三个子图中显示散点图
axs[1, 0].scatter([1, 2, 3, 4], [10, 20, 15, 30])
axs[1, 0].set_title('Subplot 3')

# 在第四个子图中显示饼图
axs[1, 1].pie([20, 30, 40, 10], labels=['A', 'B', 'C', 'D'])
axs[1, 1].set_title('Subplot 4')

plt.show()

Output:

subplot plt

在上面的示例中,我们使用plt.subplots()函数创建了一个2×2的子图,分别在四个子图中显示了折线图、柱状图、散点图和饼图,并设置了每个子图的标题。

调整子图之间的间距

有时我们需要调整子图之间的间距,以便更好地显示图形内容。可以使用plt.subplots_adjust()函数来调整子图之间的间距。

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)

# 在第一个子图中显示折线图
axs[0, 0].plot([1, 2, 3, 4], [1, 4, 9, 16])
axs[0, 0].set_title('Subplot 1')

# 在第二个子图中显示柱状图
axs[0, 1].bar(['A', 'B', 'C', 'D'], [10, 20, 15, 30])
axs[0, 1].set_title('Subplot 2')

# 在第三个子图中显示散点图
axs[1, 0].scatter([1, 2, 3, 4], [10, 20, 15, 30])
axs[1, 0].set_title('Subplot 3')

# 在第四个子图中显示饼图
axs[1, 1].pie([20, 30, 40, 10], labels=['A', 'B', 'C', 'D'])
axs[1, 1].set_title('Subplot 4')

plt.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, wspace=0.4, hspace=0.4)

plt.show()

Output:

subplot plt

在上面的示例中,我们使用plt.subplots_adjust()函数调整了子图之间的间距,包括左右间距、上下间距以及子图之间的水平和垂直间距。

创建具有不同大小的子图

除了创建相同大小的子图外,我们还可以创建具有不同大小的子图。可以使用gridspec.GridSpec()函数来实现这一目的。

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure(figsize=(10, 5))
gs = gridspec.GridSpec(2, 3, width_ratios=[1, 2, 3], height_ratios=[3, 2])

plt.subplot(gs[0])
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.title('Subplot 1')

plt.subplot(gs[1])
plt.bar(['A', 'B', 'C', 'D'], [10, 20, 15, 30])
plt.title('Subplot 2')

plt.subplot(gs[2])
plt.scatter([1, 2, 3, 4], [10, 20, 15, 30])
plt.title('Subplot 3')

plt.subplot(gs[3])
plt.pie([20, 30, 40, 10], labels=['A', 'B', 'C', 'D'])
plt.title('Subplot 4')

plt.subplot(gs[4])
plt.hist([1, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5])
plt.title('Subplot 5')

plt.subplot(gs[5])
plt.boxplot([1, 2, 3, 4, 5, 6, 7])
plt.title('Subplot 6')

plt.tight_layout()

plt.show()

Output:

subplot plt

在上面的示例中,我们创建了一个具有不同大小的子图,并使用gridspec.GridSpec()函数设置了每个子图的大小比例,包括宽度比例和高度比例。

使用subplot2grid()创建子图布局

除了使用plt.subplots()gridspec.GridSpec()创建子图外,还可以使用subplot2grid()函数来实现子图布局。subplot2grid()函数可以根据网格布局设置子图的位置和大小。

import matplotlib.pyplot as plt

plt.subplot2grid((3, 3), (0, 0), colspan=2)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.title('Subplot 1')

plt.subplot2grid((3, 3), (0, 2))
plt.bar(['A', 'B', 'C', 'D'], [10, 20, 15, 30])
plt.title('Subplot 2')

plt.subplot2grid((3, 3), (1, 0), colspan=3)
plt.scatter([1, 2, 3, 4], [10, 20, 15, 30])
plt.title('Subplot 3')

plt.subplot2grid((3, 3), (2, 0), colspan=2)
plt.pie([20, 30, 40, 10], labels=['A', 'B', 'C', 'D'])
plt.title('Subplot 4')

plt.subplot2grid((3, 3), (2, 2))
plt.hist([1, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5])
plt.title('Subplot 5')

plt.tight_layout()

plt.show()

Output:

subplot plt

在上面的示例中,我们使用subplot2grid()函数创建了一个具有不同布局的子图,可以根据网格设置子图的位置、大小和跨列。

绘制不同类型的子图

除了常见的折线图、柱状图、散点图和饼图外,我们还可以绘制其他类型的子图,如直方图、盒图等。下面列举几种常见的子图类型及相应的示例代码。

直方图

直方图用来表示数据分布情况,可以使用plt.hist()函数来绘制直方图。

import matplotlib.pyplot as plt

plt.hist([1, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5])
plt.title('Histogram')
plt.show()

Output:

subplot plt

盒图

盒图用来显示数据的分布情况,包括上下四分位数、中位数和异常值等,可以使用plt.boxplot()函数来绘制盒图。

import matplotlib.pyplot as plt

plt.boxplot([1, 2, 3, 4, 5, 6, 7])
plt.title('Boxplot')
plt.show()

Output:

subplot plt

热力图

热力图用来表示数据之间的关系,可以使用plt.imshow()函数来绘制热力图。

import matplotlib.pyplot as plt

import numpy as np

data = np.random.rand(10, 10)
plt.imshow(data, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.title('Heatmap')
plt.show()

Output:

subplot plt

3D图

除了二维图形外,我们还可以绘制三维图形,如三维散点图、曲面图等。可以使用mpl_toolkits.mplot3d模块中的函数来绘制三维图形。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

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

ax.scatter(x, y, z)
ax.set_title('3D Scatter Plot')

plt.show()

Output:

subplot plt

总结

通过本文的介绍,我们了解了如何使用subplot plt来创建和管理子图,包括创建单个子图、创建多个子图、调整子图之间的间距、创建具有不同大小的子图、使用subplot2grid()创建子图布局,以及绘制不同类型的子图。通过灵活地使用subplot plt,我们可以更好地展示数据和分析结果,帮助我们更好地理解数据之间的关系。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程