@@ -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