教你实现“Python多子图共用一个图例”

在数据可视化中,有时我们需要在同一张图中展示多个子图,并希望所有子图共用一个图例。这篇文章将教你如何在Python中使用Matplotlib库来实现这一功能。

整体流程

下面是实现“Python多子图共用一个图例”的整体流程:

步骤 操作
1 导入所需的库
2 创建一个画布和多个子图
3 在每个子图中绘制数据
4 创建一个共同的图例
5 展示图形

步骤详解

步骤一:导入所需的库

首先,我们需要导入Matplotlib库。确保你已经安装了这个库,如果没有可以通过pip install matplotlib进行安装。

import matplotlib.pyplot as plt
import numpy as np

# matplotlib.pyplot 用于绘图,numpy 用于创建数据

步骤二:创建一个画布和多个子图

使用plt.subplots函数来创建一个画布(figure)和多个子图(subplots)。在这里我们创建2行2列的子图。

fig, axs = plt.subplots(2, 2, figsize=(10, 8))
  • figsize 参数设置画布的大小。

步骤三:在每个子图中绘制数据

在每个子图中绘制不同的数据并添加标签。

x = np.linspace(0, 10, 100)

axs[0, 0].plot(x, np.sin(x), label='sin(x)', color='b')
axs[0, 1].plot(x, np.cos(x), label='cos(x)', color='r')
axs[1, 0].plot(x, np.tan(x), label='tan(x)', color='g')
axs[1, 1].plot(x, np.exp(x / 10), label='exp(x)', color='m')

# 在每个子图中绘制不同的函数并设置不同的颜色和标签

步骤四:创建一个共同的图例

为了显示共用图例,我们可以使用fig.legend来创建一个全局图例。

# 使用 fig.legend 创建统一的图例
fig.legend(loc='upper center', fontsize='large', ncol=4)
  • loc 用来设置图例的位置,fontsize 用于设置字体大小,ncol 可以控制图例的列数。

步骤五:展示图形

最后,使用plt.show()来展示整个图形。

plt.tight_layout()
plt.show()
  • tight_layout() 函数可以自动调整子图参数,使其填满整个图像区域。

代码完整示例

结合上述步骤,下面是完整的代码示例:

import matplotlib.pyplot as plt
import numpy as np

# 创建画布及子图
fig, axs = plt.subplots(2, 2, figsize=(10, 8))

# 数据准备
x = np.linspace(0, 10, 100)

# 在子图中绘制数据
axs[0, 0].plot(x, np.sin(x), label='sin(x)', color='b')
axs[0, 1].plot(x, np.cos(x), label='cos(x)', color='r')
axs[1, 0].plot(x, np.tan(x), label='tan(x)', color='g')
axs[1, 1].plot(x, np.exp(x / 10), label='exp(x)', color='m')

# 添加共同的图例
fig.legend(loc='upper center', fontsize='large', ncol=4)

# 展示图形
plt.tight_layout()
plt.show()

图示表示

通过下面的图示,可以更好地理解整个流程。

序列图

sequenceDiagram
    participant A as 开发者
    participant B as Python程序
    A->>B: 导入matplotlib和numpy库
    A->>B: 创建画布和子图
    A->>B: 在子图中绘制数据
    A->>B: 创建图例
    A->>B: 显示图形

关系图

erDiagram
    USER {
        string name
        string email
    }
    FIGURE {
        int id
        string title
        string xlabel
        string ylabel
    }
    SUBPLOT {
        int id
        string function
        string color
    }
    USER ||--o{ FIGURE : creates
    FIGURE ||--|{ SUBPLOT : contains

结尾

通过以上步骤,你应该能够实现多个子图共用一个图例的效果。在实际应用中,这种方法可以帮助你更好地组织和展示数据,使得观众能够轻松理解数据之间的关系。希望你能在此基础上,继续探索Python的强大功能,创造出更多优秀的数据可视化作品。