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:
在上面的示例中,我们创建了一个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:
在上面的示例中,我们创建了一个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:
在上面的示例中,我们使用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:
在上面的示例中,我们使用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:
在上面的示例中,我们创建了一个具有不同大小的子图,并使用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:
在上面的示例中,我们使用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:
盒图
盒图用来显示数据的分布情况,包括上下四分位数、中位数和异常值等,可以使用plt.boxplot()
函数来绘制盒图。
import matplotlib.pyplot as plt
plt.boxplot([1, 2, 3, 4, 5, 6, 7])
plt.title('Boxplot')
plt.show()
Output:
热力图
热力图用来表示数据之间的关系,可以使用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:
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来创建和管理子图,包括创建单个子图、创建多个子图、调整子图之间的间距、创建具有不同大小的子图、使用subplot2grid()创建子图布局,以及绘制不同类型的子图。通过灵活地使用subplot plt,我们可以更好地展示数据和分析结果,帮助我们更好地理解数据之间的关系。