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

如何在Matplotlib中为3D plot_surface设置动画

闻人嘉木
2023-03-14
问题内容

我已经从文件创建了3D绘图表面,并且正在尝试对绘图进行动画处理。我已经阅读了matplotlib网页中的示例以及SO中的其他示例,并注意到我需要创建一个更新函数来循环遍历文件中的值,然后创建一个matplotlib.animation对象,但是我不知道该怎么做。

如果有人可以向我解释更新功能的语法以及如何在matplotlib.animation对象中使用它,我将不胜感激。

我的数据是一个有498行的多维数组,每行我都有一个64x128值的数组。数据以以下方式组织:

数据是来自测力板的时间序列,而500条线中的每一条都是一帧,这意味着该试验持续10秒。对于每一帧,我都有另一个具有64x128值的数组。

到目前为止,这是我的代码:

from mpl_toolkits.mplot3d import *
import matplotlib.pyplot as plt
import numpy as np
from random import random, seed
from matplotlib import cm
from mpl_toolkits.mplot3d import axes3d
import matplotlib.animation as animation

source_path = "c:\\Projecto\\"
destination_path = "c:\\Projecto\\EntirePlate\\"
#fid = np.loadtxt(source_path + "rolloff_xls.txt",dtype=str)

fid_MP = open(source_path + "101mp - Entire plate roll off.xls","Ur")
lines_MP = fid_MP.readlines()
fid_MP.close()

values_MP = []

for i in lines_MP:
      if i[0].isdigit():
          values_MP.append(i)

values = np.loadtxt(values_MP,dtype=float)

new_values_MP =[]

for i in range(0,(len(values_MP)/64)):
    for j in range(0,64):
        new_values_MP.append([[i],[j],values[j]])

new_values_MP = np.asarray(new_values_MP)

fig = plt.figure()
ax = fig.gca(projection='3d')               # to work in 3d
plt.hold(True)

x_surf = np.arange(0,128)                # generate a mesh
y_surf = np.arange(0,64)
x_surf, y_surf = np.meshgrid(x_surf, y_surf)
z_surf = []

for i in range(0,64):
     # print(new_values[i])
     z_surf.append(np.asarray(new_values_MP[i][2])) # ex. function, which depends on x and y

z_surf = np.asarray(z_surf).reshape([64,128])

ax.plot_surface(x_surf, y_surf, z_surf, rstride=2, cstride=2 ,cmap=cm.jet)    # plot a 3d surface plot

ax.set_xlabel('Medio Lateral - Axis')
ax.set_ylabel('Anterior Posterior - Axis')
ax.set_zlabel('Pressure (P)')

def update(x_values, y_values, z_values):
     for i in range(0,len(values_MP)/64):
         x_surf = x_values
         y_surf = y_values
         z_surf.set_data(new_values_MP[i,2])
     return z_surf

ani = animation.FuncAnimation(fig, update, frames=xrange(len(values_MP)/64),
                               interval=50, blit=False)
plt.show()

问题答案:

这可能不是最佳方法,但是我发现文档/示例也不足够。

我采用的是以下解决方案:使用animation.FuncAnimation调用函数。在该函数中清除并重新绘制,如下所示:

from __future__ import division
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.animation as animation
import numpy as np

plot_args = {'rstride': 1, 'cstride': 1, 'cmap':
             cm.bwr, 'linewidth': 0.01, 'antialiased': True, 'color': 'w',
             'shade': True}

soln = np.zeros((size, size))
midpoint = size // 2
soln[midpoint, midpoint] = 1

#first frame
X = range(size)
Y = range(size)
X, Y = np.meshgrid(X, Y)
plot = ax.plot_surface(X, Y, soln, **plot_args)
pam_ani = animation.FuncAnimation(fig, data_gen, fargs=(soln, plot),
                              interval=30, blit=False)

def data_gen(framenumber, soln, plot):
    #change soln variable for the next frame
    ...
    ax.clear()
    plot = ax.plot_surface(X, Y, soln, **plot_args)
    return plot,


 类似资料:
  • 问题内容: 我有一个动画,其中数据范围变化很​​大。我想有一个跟踪数据的最大值和最小值(即我希望它不固定)。问题是如何做到这一点。 理想情况下,我希望该轴独立。 我尝试了以下四件事 1.天真的方法 问题:每帧都有一个新的彩条 2.添加到图像 将上面的for循环更改为 问题:这引起了 3.在自己的轴上绘制 问题:尚未更新。 2.和4.的组合 问题:常数。 问题答案: 虽然我不确定如何使用来具体实现,

  • 问题内容: 我想制作一个UIImageView动画。我声明了NSLayoutConstraintin viewDidLoad并使用了以下代码: 为什么我的图像不动? 问题答案: 在您按下时viewDidLoad,约束引擎尚未 应用,并且视图的起始位置尚未建立。 因此,可以随时在中添加原始约束viewDidLoad,但是您 需要将推迟到animateWithDuration该过程的后面(例如 vie

  • 问题内容: 我是matplotlib的新用户,我的平台是Ubuntu 10.04 Python 2.6.5 这是我的代码 错误是: 我安装了“防颗粒几何”库,但是它不起作用。 我尝试使用后端的其他参数,例如“ GTK”和“ TkAgg”。 我安装了软件包,但错误仍在下面。 谁能告诉我一个可执行的后端参数及其依赖库? 这是错误: 问题答案: 您当前选择的后端“ agg”不支持show()。 后端用于

  • 问题内容: 我正在matplotlib中生成图形,我想将x轴设置在0-10000之间,但我不想更改y轴,我希望图形自己完成。现在,两个轴都会自动生成。 这是一个例子: axis命令无法帮助我,因为我也必须设置y值。同样由于某种原因,xlim不起作用,它表示没有参数xlim。 任何建议表示赞赏,谢谢 问题答案: 这对我来说似乎很好:

  • 问题内容: 特别是在处理灰度图像时,将每个命令的色图设置为会很麻烦。如何设置matplotlib使用的默认颜色图来灰度或其他颜色图? 问题答案: 要仅为当前交互式会话或一个脚本更改默认颜色图,请使用 对于2.0之前的版本,您必须使用rcParams字典。在新版本中仍然有效。 要更改默认颜色图,请永久编辑matplotlibrc配置文件并添加该行。根据需要,将灰色值替换为任何其他有效的颜色图。配置文

  • 本文向大家介绍如何在JavaFX中将动作设置为RadioButton?,包括了如何在JavaFX中将动作设置为RadioButton?的使用技巧和注意事项,需要的朋友参考一下 单选按钮是一种圆形的按钮。它有两种状态,选择和取消选择。通常,单选按钮使用切换组进行分组,您只能在其中选择一个。 您可以通过实例化javafx.scene.control.RadioButton类(它是ToggleButto

  • 我想在swift中设置一个现有UIButton的动画,目的是让用户在点击视图控制器时注意这个按钮。动画应该从视图控制器的顶部开始,并转到按钮的初始位置。 我做了以下场景,但它不起作用: 有什么建议吗? 非常感谢。

  • 问题内容: 希望这是一个简单的问题,但我暂时无法解决。我想使用matplotlib显示2个数字,然后以交互方式使用它们。我用以下方法创建数字: 并可以使用类似MATLAB的pyplot界面在两个图中进行绘制和绘制。用 我可以确定pyplot界面的当前活动图形,具体取决于我单击的图形。现在,我想使用pyplot界面在第一个图形上绘制一些东西,但是当前图形可以是其中任意一个。所以有什么像 或任何解决方