57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
import numpy as np
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
from matplotlib.backend_bases import MouseEvent
|
|
from mpl_toolkits.mplot3d.art3d import Line3DCollection
|
|
|
|
|
|
def test_scatter_3d_projection_conservation():
|
|
fig = plt.figure()
|
|
ax = fig.add_subplot(projection='3d')
|
|
# fix axes3d projection
|
|
ax.roll = 0
|
|
ax.elev = 0
|
|
ax.azim = -45
|
|
ax.stale = True
|
|
|
|
x = [0, 1, 2, 3, 4]
|
|
scatter_collection = ax.scatter(x, x, x)
|
|
fig.canvas.draw_idle()
|
|
|
|
# Get scatter location on canvas and freeze the data
|
|
scatter_offset = scatter_collection.get_offsets()
|
|
scatter_location = ax.transData.transform(scatter_offset)
|
|
|
|
# Yaw -44 and -46 are enough to produce two set of scatter
|
|
# with opposite z-order without moving points too far
|
|
for azim in (-44, -46):
|
|
ax.azim = azim
|
|
ax.stale = True
|
|
fig.canvas.draw_idle()
|
|
|
|
for i in range(5):
|
|
# Create a mouse event used to locate and to get index
|
|
# from each dots
|
|
event = MouseEvent("button_press_event", fig.canvas,
|
|
*scatter_location[i, :])
|
|
contains, ind = scatter_collection.contains(event)
|
|
assert contains is True
|
|
assert len(ind["ind"]) == 1
|
|
assert ind["ind"][0] == i
|
|
|
|
|
|
def test_zordered_error():
|
|
# Smoke test for https://github.com/matplotlib/matplotlib/issues/26497
|
|
lc = [(np.fromiter([0.0, 0.0, 0.0], dtype="float"),
|
|
np.fromiter([1.0, 1.0, 1.0], dtype="float"))]
|
|
pc = [np.fromiter([0.0, 0.0], dtype="float"),
|
|
np.fromiter([0.0, 1.0], dtype="float"),
|
|
np.fromiter([1.0, 1.0], dtype="float")]
|
|
|
|
fig = plt.figure()
|
|
ax = fig.add_subplot(projection="3d")
|
|
ax.add_collection(Line3DCollection(lc))
|
|
ax.scatter(*pc, visible=False)
|
|
plt.draw()
|