python – 使用Matplotlib 3D轴,如何一次拖动两个轴
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用Matplotlib 3D轴,如何一次拖动两个轴,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2075字,纯文字阅读大概需要3分钟。
内容图文
![python – 使用Matplotlib 3D轴,如何一次拖动两个轴](/upload/InfoBanner/zyjiaocheng/750/246115e3f86a4a06aa1933b0c890f7ee.jpg)
基本上我在一个图中有两个三维轴,一个是通过matplotlib.aninmation构建的动画和一个三维线图,并排.我想添加功能,这样当你旋转一个轴时,另一个跟随它的旋转;例如,一个将当前视角发送到另一个轴的函数,如:
angle1 = getviewingangle(ax1)
ax2.view_init(angle1)
angle2 = getviewngangle(ax2)
ax1.view_init(angle2)
这是用于比较粒子的动画路径与其预先绘制的轨迹.
解决方法:
为了在mplot3d中同步两个子图之间的旋转,您可以将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()
内容总结
以上是互联网集市为您收集整理的python – 使用Matplotlib 3D轴,如何一次拖动两个轴全部内容,希望文章能够帮你解决python – 使用Matplotlib 3D轴,如何一次拖动两个轴所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。