教你实现“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的强大功能,创造出更多优秀的数据可视化作品。