import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 鼠标移动事件的响应函数
def onclick(event):
# 获取事件的x,y坐标
x, y = event.xdata, event.ydata
# print('x={}, y={}'.format(x, y))
# 如果x和y是None的话,表示鼠标没有在figure里面移动
# 如果x和y不是None的话,表示鼠标在figure里面移动,这时需要对x,y进行解析得到鼠标在三维坐标下的位移
if x is not None and y is not None:
# format_coord(x, y) 是 class Axes3D(Axes): 中的子函数
# 该函数会返回 鼠标在 坐标系内的坐标值,因为该程序创建了一个三维坐标系,所以返回的是三维数值
# 该函数返回值的 类型是字符串型
sting = ax.format_coord(x, y)
print(sting)
print(type(sting))
if __name__ == '__main__':
# 创建一个空白画布
fig = plt.figure()
# 创建一个鼠标移动事件
fig.canvas.mpl_connect('motion_notify_event', onclick)
# 创建一个子图
ax = Axes3D(fig)
fig.add_axes(ax)
ax.set_xlabel('X Axes')
ax.set_ylabel('Y Axes')
ax.set_zlabel('Z Axes')
# 在三维坐标系中随便画一条直线
ax.plot3D(np.array([1, 10]), np.array([1, 10]), np.array([1, 10]), color='black')
plt.show()
效果如下,当鼠标在图像内移动时,事件响应函数会实时打印鼠标在三维坐标系内的坐标点。
当鼠标拖动图像进行旋转时,事件响应函数打印的就是旋转角度
在三维坐标系下,旋转角度可以直接通过
# print(ax.roll) # print(ax.elev) # print(ax.azim)
获得,roll,elev,azim是 Axes3D()中的变量。