Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5d2d37e

Browse files
authored
Merge pull request #12137 from eric-wieser/bar3d-simplify
MAINT: Vectorize bar3d
2 parents 8d66b47 + f44b437 commit 5d2d37e

1 file changed

Lines changed: 57 additions & 18 deletions

File tree

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 57 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2437,24 +2437,63 @@ def bar3d(self, x, y, z, dx, dy, dz, color=None,
24372437
minz = np.min(z)
24382438
maxz = np.max(z + dz)
24392439

2440-
polys = []
2441-
for xi, yi, zi, dxi, dyi, dzi in zip(x, y, z, dx, dy, dz):
2442-
polys.extend([
2443-
((xi, yi, zi), (xi + dxi, yi, zi),
2444-
(xi + dxi, yi + dyi, zi), (xi, yi + dyi, zi)),
2445-
((xi, yi, zi + dzi), (xi + dxi, yi, zi + dzi),
2446-
(xi + dxi, yi + dyi, zi + dzi), (xi, yi + dyi, zi + dzi)),
2447-
2448-
((xi, yi, zi), (xi + dxi, yi, zi),
2449-
(xi + dxi, yi, zi + dzi), (xi, yi, zi + dzi)),
2450-
((xi, yi + dyi, zi), (xi + dxi, yi + dyi, zi),
2451-
(xi + dxi, yi + dyi, zi + dzi), (xi, yi + dyi, zi + dzi)),
2452-
2453-
((xi, yi, zi), (xi, yi + dyi, zi),
2454-
(xi, yi + dyi, zi + dzi), (xi, yi, zi + dzi)),
2455-
((xi + dxi, yi, zi), (xi + dxi, yi + dyi, zi),
2456-
(xi + dxi, yi + dyi, zi + dzi), (xi + dxi, yi, zi + dzi)),
2457-
])
2440+
# shape (6, 4, 3)
2441+
cuboid = np.array([
2442+
# -z
2443+
(
2444+
(0, 0, 0),
2445+
(1, 0, 0),
2446+
(1, 1, 0),
2447+
(0, 1, 0)
2448+
),
2449+
# +z
2450+
(
2451+
(0, 0, 1),
2452+
(1, 0, 1),
2453+
(1, 1, 1),
2454+
(0, 1, 1)
2455+
),
2456+
# -y
2457+
(
2458+
(0, 0, 0),
2459+
(1, 0, 0),
2460+
(1, 0, 1),
2461+
(0, 0, 1)
2462+
),
2463+
# +y
2464+
(
2465+
(0, 1, 0),
2466+
(1, 1, 0),
2467+
(1, 1, 1),
2468+
(0, 1, 1)
2469+
),
2470+
# -x
2471+
(
2472+
(0, 0, 0),
2473+
(0, 1, 0),
2474+
(0, 1, 1),
2475+
(0, 0, 1)
2476+
),
2477+
# +x
2478+
(
2479+
(1, 0, 0),
2480+
(1, 1, 0),
2481+
(1, 1, 1),
2482+
(1, 0, 1)
2483+
),
2484+
])
2485+
2486+
# indexed by [bar, face, vertex, coord]
2487+
polys = np.empty(x.shape + cuboid.shape)
2488+
2489+
# handle each coordinate separately
2490+
for i, p, dp in [(0, x, dx), (1, y, dy), (2, z, dz)]:
2491+
p = p[..., np.newaxis, np.newaxis]
2492+
dp = dp[..., np.newaxis, np.newaxis]
2493+
polys[..., i] = p + dp * cuboid[..., i]
2494+
2495+
# collapse the first two axes
2496+
polys = polys.reshape((-1,) + polys.shape[2:])
24582497

24592498
facecolors = []
24602499
if color is None:

0 commit comments

Comments
 (0)