python 代码生成的图片同时显示

Python的matplotlib包可以轻松的将数据可视化,最近遇到了一个问题,想同时在两个窗口展示两张图,但是代码运行结果总是一张一张的往外冒(显示一张图,把当前的图叉掉之后才能显示另一张图),如图所示:
在这里插入图片描述

代码如下:

import numpy as np
import math
import matplotlib.pyplot as plt

## 1.设计一个匀加速直线运动,以观测此运动
X_real = np.mat(np.zeros((2, 100)))  # 空矩阵,用于存放真实状态向量
X_real[:, 0] = np.mat([[0.0],  # 初始状态向量
                       [1.0]])
a_real = 0.1  # 真实加速度
F = np.mat([[1.0, 1.0],  # 状态转移矩阵
            [0.0, 1.0]])
Q = np.mat([[0.0001, 0.0],  # 状态转移协方差矩阵,我们假设外部干扰很小
            [0.0, 0.0001]])
B = np.mat([[0.5],  # 控制矩阵
            [1.0]])
for i in range(99):
    X_real[:, i + 1] = F * X_real[:, i] + B * a_real  # 计算真实状态向量
X_real = np.array(X_real)
fig1 = plt.figure(1)
plt.grid()
plt.title('real displacement')
plt.xlabel('k (s)')
plt.ylabel('x (m)')
plt.plot(X_real[0, :])
plt.show()
fig2 = plt.figure(2)
plt.grid()
plt.title('real velocity')
plt.xlabel('k (s)')
plt.ylabel('v (m/s)')
plt.plot(X_real[1, :])
plt.show()
X_real = np.mat(X_real)

有两种方法可以实现

1、那么,如果需要在多张画布上同时显示这两张图片,达到如图所示的效果,该怎么改呢?

在这里插入图片描述

其实很简单,只需删除前一个plt.show(),只保留最后一个就可以了,如下所示:

import numpy as np
import math
import matplotlib.pyplot as plt

## 1.设计一个匀加速直线运动,以观测此运动
X_real = np.mat(np.zeros((2, 100)))  # 空矩阵,用于存放真实状态向量
X_real[:, 0] = np.mat([[0.0],  # 初始状态向量
                       [1.0]])
a_real = 0.1  # 真实加速度
F = np.mat([[1.0, 1.0],  # 状态转移矩阵
            [0.0, 1.0]])
Q = np.mat([[0.0001, 0.0],  # 状态转移协方差矩阵,我们假设外部干扰很小
            [0.0, 0.0001]])
B = np.mat([[0.5],  # 控制矩阵
            [1.0]])
for i in range(99):
    X_real[:, i + 1] = F * X_real[:, i] + B * a_real  # 计算真实状态向量
X_real = np.array(X_real)
fig1 = plt.figure(1)
plt.grid()
plt.title('real displacement')
plt.xlabel('k (s)')
plt.ylabel('x (m)')
plt.plot(X_real[0, :])
########################## plt.show()删除这一行
fig2 = plt.figure(2)
plt.grid()
plt.title('real velocity')
plt.xlabel('k (s)')
plt.ylabel('v (m/s)')
plt.plot(X_real[1, :])
plt.show()#########################只保留最后一个plt.show()
X_real = np.mat(X_real)

2、如果要在一张画布上同时显示多张图片,图片对比显示,达到如图所示的效果,该怎么改呢?

在这里插入图片描述
只需添加plt.subplot()语句,只保留最后一个plt.show() :

import numpy as np
import math
import matplotlib.pyplot as plt

## 1.设计一个匀加速直线运动,以观测此运动
X_real = np.mat(np.zeros((2, 100)))  # 空矩阵,用于存放真实状态向量
X_real[:, 0] = np.mat([[0.0],  # 初始状态向量
                       [1.0]])
a_real = 0.1  # 真实加速度
F = np.mat([[1.0, 1.0],  # 状态转移矩阵
            [0.0, 1.0]])
Q = np.mat([[0.0001, 0.0],  # 状态转移协方差矩阵,我们假设外部干扰很小
            [0.0, 0.0001]])
B = np.mat([[0.5],  # 控制矩阵
            [1.0]])
for i in range(99):
    X_real[:, i + 1] = F * X_real[:, i] + B * a_real  # 计算真实状态向量
X_real = np.array(X_real)
plt.subplot(2, 2, 1)		############################显示第一张图片
# fig1 = plt.figure(1)
plt.grid()
plt.title('real displacement')
plt.xlabel('k (s)')
plt.ylabel('x (m)')
plt.plot(X_real[0, :])
# plt.show()
plt.subplot(2, 2, 2)		############################显示第二张图片
# fig2 = plt.figure(2)
plt.grid()
plt.title('real velocity')
plt.xlabel('k (s)')
plt.ylabel('v (m/s)')
plt.plot(X_real[1, :])
# plt.show()
X_real = np.mat(X_real)

## 2.建立传感器观测值
z_t = np.mat(np.zeros((2, 100)))  # 空矩阵,用于存放传感器观测值
H = np.mat(np.zeros((2, 2)))
H[0, 0], H[1, 1] = -1.0, -1.0
noise = np.mat(np.random.randn(2, 100))  # 加入位移方差为1,速度方差为1的传感器噪声
R = np.mat([[1.0, 0.0],  # 观测噪声的协方差矩阵
            [0.0, 1.0]])
for i in range(100):
    z_t[:, i] = H * X_real[:, i] + noise[:, i]
z_t = np.array(z_t)
plt.subplot(2, 2, 3)          ############################显示第三张图片
# fig3 = plt.figure(3)
plt.grid()
plt.title('sensor displacement')
plt.xlabel('k (s)')
plt.ylabel('x (m)')
plt.plot(z_t[0, :])
# plt.show()
plt.subplot(2, 2, 4)					############################显示第四张图片
# fig4 = plt.figure(4)
plt.grid()
plt.title('sensor velocity')
plt.xlabel('k (s)')
plt.ylabel('v (m/s)')
plt.plot(z_t[1, :])
plt.show()				############################只保留最后一个plt.show()	
z_t = np.mat(z_t)

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值