当前位置: 首页 > 面试题库 >

使用matplotlib的3D动画

华季同
2023-03-14
问题内容

我想用matplotlib制作3D动画,但是我不知道该怎么做。这是我的无效代码

from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import animation
from math import *

fig = plt.figure()
ax = fig.add_subplot(111) #, projection='3d'

#setting
ax.set_xlim(-5,5)
ax.set_ylim(-5,5)
#ax.set_zlim(-5,5)
ax.set_xlabel('x')
ax.set_ylabel('y')
#ax.set_zlabel('z')
ax.grid()

f1, = ax.plot([], [], "r-", lw=1) #plot1

def gen():
    for phi in np.linspace(0,2*pi,100):
        yield np.cos(phi), np.sin(phi), phi

def update(data):
    p1, q1, psi = data
    f1.set_data(p1,q1)
    #f1.set_3d_properties(psi)

ani = animation.FuncAnimation(fig, update, gen, blit=False, interval=100, repeat=True)
#ani.save('matplot003.gif', writer='imagemagick')
plt.show()

问题答案:

我使用了以下示例http://matplotlib.org/1.4.1/examples/animation/simple_3danim.html
并修改了您的代码:

from matplotlib import pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d.axes3d as p3
from matplotlib import animation

fig = plt.figure()
ax = p3.Axes3D(fig)

def gen(n):
    phi = 0
    while phi < 2*np.pi:
        yield np.array([np.cos(phi), np.sin(phi), phi])
        phi += 2*np.pi/n

def update(num, data, line):
    line.set_data(data[:2, :num])
    line.set_3d_properties(data[2, :num])

N = 100
data = np.array(list(gen(N))).T
line, = ax.plot(data[0, 0:1], data[1, 0:1], data[2, 0:1])

# Setting the axes properties
ax.set_xlim3d([-1.0, 1.0])
ax.set_xlabel('X')

ax.set_ylim3d([-1.0, 1.0])
ax.set_ylabel('Y')

ax.set_zlim3d([0.0, 10.0])
ax.set_zlabel('Z')

ani = animation.FuncAnimation(fig, update, N, fargs=(data, line), interval=10000/N, blit=False)
#ani.save('matplot003.gif', writer='imagemagick')
plt.show()


 类似资料:
  • 问题内容: 我正在绘制星团中的位置,我的数据在具有x,y,z位置以及时间索引的数据框中。 我能够生成3d散点图,并试图生成旋转图-我虽然取得了一些成功,但是却在动画API方面苦苦挣扎。 如果我的“ update_graph”函数仅返回一个新的ax.scatter(),则除非我重建整个图,否则旧图将保持绘制状态。看来效率低下。同样,我必须将间隔设置得很高,否则我的动画每隔一帧就会“跳过”,所以这表示

  • 主要内容:第一个三维绘图程序,3D散点图,3D等高线图,3D线框图,3D曲面图最初开发的 Matplotlib,仅支持绘制 2d 图形,后来随着版本的不断更新, Matplotlib 在二维绘图的基础上,构建了一部分较为实用的 3D 绘图程序包,比如 ,通过调用该程序包一些接口可以绘制 3D散点图、3D曲面图、3D线框图等 mpl_toolkits 是 Matplotlib 的绘图工具包。 第一个三维绘图程序 下面编写第一个三维绘图程序。 首先创建一个三维绘图区域, plt

  • 问题内容: 基本上我在一个图中有两个3d轴,一个通过matplotlib.aninmation构建的动画和一个并排的3d线图。我想添加功能,以便当您旋转一个轴时,另一个跟随它的旋转。例如,将当前视角发送到另一个轴的功能,例如; 等用于比较粒子的动画路径与其预先绘制的轨迹。 问题答案: 为了使mplot3d中两个子图之间的旋转同步,您可以将其连接到一个函数,该函数从旋转的图读取角度并将其应用于其他各

  • 问题内容: 我有这个代码。我想添加一个子图来绘制余弦函数。(我不想创建一个类)。第二个图也应动态更新 问题答案: 基本上,您可以使用与示例中的结构非常相似的结构。您只需要创建一个附加轴(子图)和第二条线对象:

  • 问题内容: 使用python的matplotlib绘制3d图形时出现问题。使用以下python函数,我得到了这个图: 在这里,有孔栅格和和的功能和。代表表面颜色。 但是现在我想水平切割该图,仅保留z在-1和2之间的部分。 我想要的,用gnu​​plot绘制的是这样的: 我尝试了和,但是它们都没有给我想要的数字。有人知道如何使用python吗? 问题答案: 你在那里有漂亮的圆锥形交叉点:) 您要尝试

  • 问题内容: 如何逆转3D图的z轴上的顺序(即,负值向上,正值向下)?下面的代码生成一个圆锥体,其底部指向下方;是否有可用于更改订单价格指令的命令(如或类似的东西?)? 以下代码绘制了一个圆锥体,其底部指向下方。我想反转z轴顺序,以便其绘制时基部朝上,就像冰淇淋蛋筒一样,在图的顶部而不是底部为-1。 问题答案: 使用方法: