第八星系人气爱 发表于 2024-4-17 22:43:23

Python基础教学:绘制多子图和不规则子图-Matplotlib的使用

Python基础教学:绘制多子图和不规则子图-Matplotlib的使用


原创 第八星系-小拾壹 第八星系人造大气理论爱好者 2024-04-11 09:00 四川

之前我们简单介绍了Matplotlib绘图的简单运用,具体过程就不多赘述,本次文章主要讲解我们该如何进行多个子图的绘制。Matplotlib支持多种绘制多图的方法,其中最常用的是subplot和subplots函数。

subplot函数可以将一个图像分成若干个小区域,并在其中绘制子图,而subplots函数可以一次性创建多个子图,并返回一个包含所有子图的数组对象。其实matplotlib绘图之所以在python绘图领域经久不衰,绘制多个子图的灵活性和简洁性算是它的一个亮点。

CHAPTER.1

绘制简单子图:对应的有plt的subplot和figure的add_subplot的方法,参数可以是一个三位数字(例如111),也可以是一个数组(例如),3个数字分别代表:
子图总行数
子图总列数
子图位置

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False#设置坐标上的负号


# 创建一些假数据。
x1 = np.linspace(0.0, 5.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
x2 = np.linspace(0.0, 2.0)
y2 = np.cos(2 * np.pi * x2)

#分别设置每个子图
fig, (ax1, ax2) = plt.subplots(2, 1)
fig.suptitle('一个双子图 ')#设置标题

ax1.plot(x1, y1, 'o-')#'o-'-圆形标记
ax1.set_ylabel('阻尼振荡')

ax2.plot(x2, y2, '.-')# '.-'点标记
ax2.set_xlabel('time (s)')
ax2.set_ylabel('cos()')

plt.show()




#也可以使用以下方法一次生成一个子图
plt.subplot(2, 1, 1)#第一个数字是行,第二个数字是列,第三个数字是个数(图形所处顺序的序号)
plt.plot(x1, y1, 'o-')
plt.title('一个双子图')
plt.ylabel('阻尼振荡')

plt.subplot(2, 1, 2)
plt.plot(x2, y2, '.-')
plt.xlabel('time (s)')
plt.ylabel('cos()')

plt.show()hello world!");


CHAPTER.2


当然还有更为方便的方法,使用plt.subplots(m,n),我们可以一次性生成m行n列的画布。注意前面需要figure和ax进行接收

import matplotlib as mpl
figure,ax=plt.subplots(2,2) # 多行subplots得到的ax数组是二维的
#接收数据
x1 = np.linspace(0.0, 5.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)

ax.plot(x1,y1,'o-')


CHAPTER.3


设置不规则子图:在不同情况下,我们可能会用到不同比例的不规则图形,这个时候,我们需要对每一个子图进行分别刻画。例如以下图形,第一幅图在左列第一个,把整个画布想象为两行两列的画布,第一个自然也就是221:第三幅图占据右边画布,应该把整个画布想象为一行两列的画布,第一个自然也就是122

plt.subplot(221)
plt.subplot(223)
plt.subplot(122)



CHAPTER.4

创建相邻子图:要创建共享公共轴的绘图(直观上),可以设置子图之间 hspace 的值为零。创建子图时传递 sharex=True 将自动关闭除底部的X刻度和标签外的所有x刻度和标签轴。在此示例中,这些图共享一个公共x轴,但可以遵循相同的x轴逻辑来提供公共y轴。

#设置x轴和不同y轴的值
t = np.arange(0.0, 2.0, 0.01)
s1 = np.sin(2 * np.pi * t)
s2 = np.exp(-t)
s3 = s1 * s2

#创建一个画布,建立三行一列的子图
fig, axs = plt.subplots(3, 1, sharex=True)
# 移除轴线之间的垂直空间
fig.subplots_adjust(hspace=0)

# 绘制每个图形,并手动设置y刻度值
axs.plot(t, s1)
axs.set_yticks(np.arange(-0.9, 1.0, 0.4))
axs.set_ylim(-1, 1)

axs.plot(t, s2)
axs.set_yticks(np.arange(0.1, 1.0, 0.2))
axs.set_ylim(0, 1)

axs.plot(t, s3)
axs.set_yticks(np.arange(-0.9, 1.0, 0.4))
axs.set_ylim(-1, 1)

plt.show(o world!");


本篇文章来源于微信公众号:第八星系


页: [1]
查看完整版本: Python基础教学:绘制多子图和不规则子图-Matplotlib的使用