plt.subplot(2,2,1)的输出结果
时间: 2023-12-06 07:03:52 浏览: 31
plt.subplot(2,2,1)可以将画布分为2行2列,然后在第1个位置(即左上角)绘制一个子图。如果需要在这个子图里面绘制数据,可以在plt.subplot(2,2,1)后面加上绘图代码,例如:
```
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.sin(x)
plt.subplot(2,2,1)
plt.plot(x, y)
plt.title('subplot(2,2,1)')
plt.show()
```
这段代码将会在左上角的子图中绘制出一个正弦函数的图像,并且在图像上方显示出子图的标题。
相关问题
如何查看用plt.subplot构建的其中一张子图
首先需要理解`plt.subplot`是用于创建多个子图的函数,它接受三个参数,分别是行数、列数和当前子图的编号。
假设你用`plt.subplot`创建了一个包含4个子图的大图:
```python
import matplotlib.pyplot as plt
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3, 4])
plt.subplot(2, 2, 2)
plt.plot([4, 3, 2, 1])
plt.subplot(2, 2, 3)
plt.plot([1, 3, 2, 4])
plt.subplot(2, 2, 4)
plt.plot([2, 1, 4, 3])
plt.show()
```
现在你想查看其中的某一个子图,比如第3个子图,在Matplotlib中,可以使用`plt.gcf`(获取当前图表)和`plt.gca`(获取当前坐标轴)函数来获取当前的图表和坐标轴对象。然后,可以使用`ax.get_subplotspec()`方法获取当前坐标轴的子图规范对象,进而获取到该子图的位置信息。
具体来说,可以使用以下代码实现:
```python
import matplotlib.pyplot as plt
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3, 4])
plt.subplot(2, 2, 2)
plt.plot([4, 3, 2, 1])
plt.subplot(2, 2, 3)
plt.plot([1, 3, 2, 4])
plt.subplot(2, 2, 4)
plt.plot([2, 1, 4, 3])
fig = plt.gcf() # 获取当前图表对象
ax3 = plt.gca() # 获取当前坐标轴对象
subplotspec = ax3.get_subplotspec() # 获取当前坐标轴的子图规范对象
print(subplotspec.rowspan) # 输出第3个子图的行跨度
print(subplotspec.colspan) # 输出第3个子图的列跨度
print(subplotspec.row1) # 输出第3个子图的起始行
print(subplotspec.row2) # 输出第3个子图的结束行
print(subplotspec.col1) # 输出第3个子图的起始列
print(subplotspec.col2) # 输出第3个子图的结束列
plt.show()
```
在上面的代码中,`subplotspec.rowspan`和`subplotspec.colspan`分别表示当前子图占据的行数和列数,`subplotspec.row1`和`subplotspec.row2`分别表示当前子图的起始行和结束行(从0开始计数),`subplotspec.col1`和`subplotspec.col2`分别表示当前子图的起始列和结束列(从0开始计数)。根据这些信息,可以找到要查看的子图。
优化这段代码import numpy as np import matplotlib.pyplot as plt import math # 待测信号 freq = 17.77777 # 信号频率 t = np.linspace(0, 0.2, 1001) Omega =2 * np.pi * freq phi = np.pi A=1 x = A * np.sin(Omega * t + phi) # 加入噪声 noise = 0.2 * np.random.randn(len(t)) x_noise = x + noise # 参考信号 ref0_freq = 17.77777 # 参考信号频率 ref0_Omega =2 * np.pi * ref0_freq ref_0 = 2*np.sin(ref0_Omega * t) # 参考信号90°相移信号 ref1_freq = 17.77777 # 参考信号频率 ref1_Omega =2 * np.pi * ref1_freq ref_1 = 2*np.cos(ref1_Omega * t) # 混频信号 signal_0 = x_noise * ref_0 signal_1 = x_noise * ref_1 # 绘图 plt.figure(figsize=(13,4)) plt.subplot(2,3,1) plt.plot(t, x_noise) plt.title('input signal', fontsize=13) plt.subplot(2,3,2) plt.plot(t, ref_0) plt.title('reference signal', fontsize=13) plt.subplot(2,3,3) plt.plot(t, ref_1) plt.title('phase-shifted by 90°', fontsize=13) plt.subplot(2,3,4) plt.plot(t, signal_0) plt.title('mixed signal_1', fontsize=13) plt.subplot(2,3,5) plt.plot(t, signal_1) plt.title('mixed signal_2', fontsize=13) plt.tight_layout() # 计算平均值 X = np.mean(signal_0) Y = np.mean(signal_1) print("X=",X) print("Y=",Y) # 计算振幅和相位 X_square =X**2 Y_square =Y**2 sum_of_squares = X_square + Y_square result = np.sqrt(sum_of_squares) Theta = np.arctan2(Y, X) print("R=", result) print("Theta=", Theta)把输入信号部分整理成函数,输入参数为t_vec,A,phi,noise,锁相测量部分也整理成代码,输入为待测周期信号,以及频率freq,输出为Alpha
好的,让我们逐步来进行优化:
1. 导入模块时,可以将相同类型的模块放在一起,并将numpy和matplotlib.pyplot模块的别名简写成np和plt,可以提高代码的可读性。
```
import numpy as np
import matplotlib.pyplot as plt
import math
```
2. 待测信号部分可以整理成一个函数,使得代码更加清晰,易于维护。并且将变量名改为小写字母,符合Python的命名规范。
```
def generate_signal(freq, t, phi, noise):
omega = 2 * np.pi * freq
A = 1
x = A * np.sin(omega * t + phi) + noise
return x
```
3. 参考信号部分也可以整理成一个函数,同样将变量名改为小写字母。
```
def generate_reference_signal(freq, t):
omega = 2 * np.pi * freq
ref_0 = 2 * np.sin(omega * t)
ref_1 = 2 * np.cos(omega * t)
return ref_0, ref_1
```
4. 绘图部分可以将代码整合成一个函数,减少重复的代码。
```
def plot_signals(t, x_noise, ref_0, ref_1, signal_0, signal_1):
plt.figure(figsize=(13,4))
plt.subplot(2,3,1)
plt.plot(t, x_noise)
plt.title('input signal', fontsize=13)
plt.subplot(2,3,2)
plt.plot(t, ref_0)
plt.title('reference signal', fontsize=13)
plt.subplot(2,3,3)
plt.plot(t, ref_1)
plt.title('phase-shifted by 90°', fontsize=13)
plt.subplot(2,3,4)
plt.plot(t, signal_0)
plt.title('mixed signal_1', fontsize=13)
plt.subplot(2,3,5)
plt.plot(t, signal_1)
plt.title('mixed signal_2', fontsize=13)
plt.tight_layout()
```
5. 锁相测量部分也可以整理成一个函数,同样将变量名改为小写字母。
```
def phase_locked_measurement(signal_0, signal_1, freq):
X = np.mean(signal_0)
Y = np.mean(signal_1)
X_square = X ** 2
Y_square = Y ** 2
sum_of_squares = X_square + Y_square
result = np.sqrt(sum_of_squares)
Theta = np.arctan2(Y, X)
Alpha = result / (2 * np.pi * freq)
return Alpha
```
6. 最后将整个程序整合起来,变成一个主函数,并且将常量值赋值给变量,提高代码的可读性。
```
def main():
# 待测信号
freq = 17.77777
t = np.linspace(0, 0.2, 1001)
phi = np.pi
noise = 0.2 * np.random.randn(len(t))
x_noise = generate_signal(freq, t, phi, noise)
# 参考信号
ref_freq = 17.77777
ref_0, ref_1 = generate_reference_signal(ref_freq, t)
# 混频信号
signal_0 = x_noise * ref_0
signal_1 = x_noise * ref_1
# 绘图
plot_signals(t, x_noise, ref_0, ref_1, signal_0, signal_1)
# 锁相测量
Alpha = phase_locked_measurement(signal_0, signal_1, freq)
# 输出结果
print("Alpha=", Alpha)
if __name__ == '__main__':
main()
```
这样,代码就更加清晰、易于维护了。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)