python matplotlib.pyplot 如何实时绘制三维动态窗口?(可鼠标拖动角度)

实时绘制三维图并更新窗口

# -*- coding: utf-8 -*-
"""
@File    : test.py
@Time    : 2020/5/26 18:09
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
from matplotlib import pyplot as plt  # 用来绘制图形
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

X1 = X2 = np.arange(-5, 15, 1)
X1, X2 = np.meshgrid(X1, X2)

Z = 1 / 2 * X1 ** 2

# 创建绘制实时损失的动态窗口
plt.ion()
for i in range(30000):
    plt.clf()  # 清除之前画的图
    fig = plt.gcf()  # 获取当前图
    ax = fig.gca(projection='3d')  # 获取当前轴
    ax.plot_surface(X1, X2, Z, cmap='rainbow')
    plt.pause(0.001)  # 暂停一段时间,不然画的太快会卡住显示不出来
    plt.ioff()  # 关闭画图窗口Z

    Z = Z - X1 + 2 * X2  # 变换Z值

# 加这个的目的是绘制完后不让窗口关闭
plt.show()

结果:
在这里插入图片描述

添加鼠标拖动观察功能

# -*- coding: utf-8 -*-
"""
@File    : test.py
@Time    : 2020/5/26 18:09
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
from matplotlib import pyplot as plt  # 用来绘制图形
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

X1 = X2 = np.arange(-5, 15, 1)
X1, X2 = np.meshgrid(X1, X2)

Z = 1 / 2 * X1 ** 2

# 绘制三维图初始角度
azim = -60
elev = 30

# 创建绘制实时损失的动态窗口
plt.ion()
for i in range(30000):
    plt.clf()  # 清除之前画的图
    fig = plt.gcf()  # 获取当前图
    ax = fig.gca(projection='3d')  # 获取当前轴

    ax.view_init(elev, azim)  # 设定角度

    ax.plot_surface(X1, X2, Z, cmap='rainbow')
    plt.pause(0.001)  # 暂停一段时间,不然画的太快会卡住显示不出来

    elev, azim = ax.elev, ax.azim  # 将当前绘制的三维图角度记录下来,用于下一次绘制(放在ioff()函数前后都可以,但放在其他地方就不行)
    # elev, azim = ax.elev, ax.azim - 1 # 可自动旋转角度,不需要人去拖动

    plt.ioff()  # 关闭画图窗口Z

    Z = Z - X1 + 2 * X2  # 变换Z值

# 加这个的目的是绘制完后不让窗口关闭
plt.show()

结果:

拖动观察

在这里插入图片描述

自动旋转

在这里插入图片描述
参考文章1:Python学习(一) —— matplotlib绘制三维轨迹图

参考文章2:在Matplotlib 3D图中获取视角/摄像机角度?

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值