diff --git a/doc/api/next_api_changes/behavior/25112-GG.rst b/doc/api/next_api_changes/behavior/25112-GG.rst new file mode 100644 index 000000000000..17fda5c449f4 --- /dev/null +++ b/doc/api/next_api_changes/behavior/25112-GG.rst @@ -0,0 +1,8 @@ +Streamplot now draws streamlines as one piece if no width or no color variance +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Since there is no need to draw streamlines piece by piece if there is no color +change or width change, now streamplot will draw each streamline in one piece. + +The behavior for varying width or varying color is not changed, same logic is +used for these kinds of streamplots. diff --git a/lib/matplotlib/streamplot.py b/lib/matplotlib/streamplot.py index 95ce56a5126f..819ac488b283 100644 --- a/lib/matplotlib/streamplot.py +++ b/lib/matplotlib/streamplot.py @@ -198,8 +198,13 @@ def streamplot(axes, x, y, u, v, density=1, linewidth=None, color=None, tx += grid.x_origin ty += grid.y_origin - points = np.transpose([tx, ty]).reshape(-1, 1, 2) - streamlines.extend(np.hstack([points[:-1], points[1:]])) + # Create multiple tiny segments if varying width or color is given + if isinstance(linewidth, np.ndarray) or use_multicolor_lines: + points = np.transpose([tx, ty]).reshape(-1, 1, 2) + streamlines.extend(np.hstack([points[:-1], points[1:]])) + else: + points = np.transpose([tx, ty]) + streamlines.append(points) # Add arrows halfway along each trajectory. s = np.cumsum(np.hypot(np.diff(tx), np.diff(ty))) diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_direction.png b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_direction.png index 835e159665c9..5381bad998c6 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_direction.png and b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_direction.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_maxlength.png b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_maxlength.png index 4cc023134222..f07ffb89aa20 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_maxlength.png and b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_maxlength.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_maxlength_no_broken.png b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_maxlength_no_broken.png index 69b7ca96a9c1..7f32ada3f6d5 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_maxlength_no_broken.png and b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_maxlength_no_broken.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_startpoints.png b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_startpoints.png index b572274772c0..0a91d0ddedd1 100644 Binary files a/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_startpoints.png and b/lib/matplotlib/tests/baseline_images/test_streamplot/streamplot_startpoints.png differ