Кажется, есть разница между исполнителями стандартных функций 2D-черчения, таких как .plot
или .scatter
и Poly3DCollection
, которые возвращает mplot3d
.voxels
.Я не могу понять, как получить какую-то позицию x, y, z из вокселей, на которые я нажимаю:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_title('click on points')
voxels = ax.voxels(np.random.rand(10,10,10) > 0.95, picker=5) # 5 points tolerance
def onpick(event):
print(event.__dict__.keys())
print(event.artist.__dict__.keys())
# Nothing in the objects I get seems to contain x y z information.
fig.canvas.mpl_connect('pick_event', onpick)
plt.show()
Я пытался просмотреть документацию Poly3DCollection
API и некоторые базовые классыЯ пытался реализовать некоторый код, который я нашел внутри этого datacursor пакета, но я не могу заставить его работать.
Воксели находятся в целочисленной сетке, так что все сЦелочисленная точность хороша, если вы можете получить какой-то идентификатор, который я могу сопоставить с позицией вокселя, это тоже нормально.