2024-09-27 09:34:08 发布
网友
基本上,我在一个图形中有两个3d轴,一个通过matplotlib.a信息构建的动画轴和一个并排的3d线条图。我想添加一些功能,这样当你旋转一个轴时,另一个轴会跟随它的旋转;例如,向另一个轴发送当前视角的函数,如:
angle1 = getviewingangle(ax1) ax2.view_init(angle1) angle2 = getviewngangle(ax2) ax1.view_init(angle2)
等等。这是用于比较粒子的动画路径与其预先绘制的轨迹
为了同步mplot3d中两个子图之间的旋转,您可以将motion_notify_event连接到一个函数,该函数从旋转的图中读取角度,并将其应用于相应的其他图
motion_notify_event
以下是添加了所述功能的库中的示例
from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm import matplotlib.pyplot as plt import numpy as np n_angles = 36 n_radii = 8 radii = np.linspace(0.125, 1.0, n_radii) angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False) angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1) x = np.append(0, (radii*np.cos(angles)).flatten()) y = np.append(0, (radii*np.sin(angles)).flatten()) z = np.sin(-x*y) fig = plt.figure( figsize=(13,6)) fig.subplots_adjust(left=0, right=1, top=1, bottom=0, wspace=0) ax = fig.add_subplot(1, 2, 1, projection='3d') ax2 = fig.add_subplot(1, 2, 2, projection='3d') ax.plot_trisurf(x, y, z, cmap=cm.jet, linewidth=0.2) ax2.plot_trisurf(x, y, z, cmap=cm.viridis, linewidth=0.5) def on_move(event): if event.inaxes == ax: ax2.view_init(elev=ax.elev, azim=ax.azim) elif event.inaxes == ax2: ax.view_init(elev=ax2.elev, azim=ax2.azim) else: return fig.canvas.draw_idle() c1 = fig.canvas.mpl_connect('motion_notify_event', on_move) plt.show()
另外,还可以同步缩放实用程序。在这种情况下,可以使用以下功能
def on_move(event): if event.inaxes == ax: if ax.button_pressed in ax._rotate_btn: ax2.view_init(elev=ax.elev, azim=ax.azim) elif ax.button_pressed in ax._zoom_btn: ax2.set_xlim3d(ax.get_xlim3d()) ax2.set_ylim3d(ax.get_ylim3d()) ax2.set_zlim3d(ax.get_zlim3d()) elif event.inaxes == ax2: if ax2.button_pressed in ax2._rotate_btn: ax.view_init(elev=ax2.elev, azim=ax2.azim) elif ax2.button_pressed in ax2._zoom_btn: ax.set_xlim3d(ax2.get_xlim3d()) ax.set_ylim3d(ax2.get_ylim3d()) ax.set_zlim3d(ax2.get_zlim3d()) else: return fig.canvas.draw_idle()
为了同步mplot3d中两个子图之间的旋转,您可以将
motion_notify_event
连接到一个函数,该函数从旋转的图中读取角度,并将其应用于相应的其他图以下是添加了所述功能的库中的示例
另外,还可以同步缩放实用程序。在这种情况下,可以使用以下功能
相关问题 更多 >
编程相关推荐