plopp 25.7.1__tar.gz → 25.10.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. {plopp-25.7.1 → plopp-25.10.0}/.copier-answers.yml +2 -2
  2. plopp-25.10.0/.github/workflows/python-version-ci +1 -0
  3. {plopp-25.7.1 → plopp-25.10.0}/.github/workflows/release.yml +2 -2
  4. {plopp-25.7.1 → plopp-25.10.0}/.pre-commit-config.yaml +0 -1
  5. plopp-25.10.0/.python-version +1 -0
  6. {plopp-25.7.1 → plopp-25.10.0}/PKG-INFO +3 -4
  7. plopp-25.10.0/docs/customization/animations.ipynb +242 -0
  8. {plopp-25.7.1 → plopp-25.10.0}/docs/customization/index.md +7 -0
  9. {plopp-25.7.1 → plopp-25.10.0}/docs/customization/tweaking-figures.ipynb +26 -61
  10. {plopp-25.7.1 → plopp-25.10.0}/docs/developer/getting-started.md +1 -1
  11. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/interactive-masking.ipynb +1 -1
  12. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/masking-a-range.ipynb +1 -1
  13. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/peeling-layers.ipynb +1 -1
  14. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/rectangle-selection.ipynb +1 -1
  15. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/streaming-plot.ipynb +1 -1
  16. {plopp-25.7.1 → plopp-25.10.0}/docs/getting-started/overview.ipynb +6 -20
  17. {plopp-25.7.1 → plopp-25.10.0}/docs/index.md +4 -0
  18. {plopp-25.7.1 → plopp-25.10.0}/docs/plotting/image-plot.ipynb +54 -15
  19. {plopp-25.7.1 → plopp-25.10.0}/docs/plotting/line-plot.ipynb +44 -46
  20. {plopp-25.7.1 → plopp-25.10.0}/docs/plotting/slicer-plot.ipynb +29 -3
  21. {plopp-25.7.1 → plopp-25.10.0}/pyproject.toml +2 -3
  22. {plopp-25.7.1 → plopp-25.10.0}/requirements/base.txt +5 -5
  23. {plopp-25.7.1 → plopp-25.10.0}/requirements/basetest.in +1 -1
  24. {plopp-25.7.1 → plopp-25.10.0}/requirements/basetest.txt +16 -21
  25. {plopp-25.7.1 → plopp-25.10.0}/requirements/ci.txt +5 -11
  26. {plopp-25.7.1 → plopp-25.10.0}/requirements/dev.txt +11 -7
  27. {plopp-25.7.1 → plopp-25.10.0}/requirements/docs.in +1 -0
  28. {plopp-25.7.1 → plopp-25.10.0}/requirements/docs.txt +5 -5
  29. {plopp-25.7.1 → plopp-25.10.0}/requirements/mypy.txt +1 -1
  30. {plopp-25.7.1 → plopp-25.10.0}/requirements/nightly.in +1 -1
  31. {plopp-25.7.1 → plopp-25.10.0}/requirements/nightly.txt +15 -20
  32. {plopp-25.7.1 → plopp-25.10.0}/requirements/static.txt +2 -2
  33. {plopp-25.7.1 → plopp-25.10.0}/requirements/wheels.txt +1 -3
  34. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/matplotlib/canvas.py +89 -8
  35. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/matplotlib/line.py +3 -1
  36. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/matplotlib/scatter.py +2 -2
  37. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/matplotlib/tiled.py +5 -1
  38. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/plotly/canvas.py +73 -8
  39. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/pythreejs/canvas.py +22 -0
  40. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/pythreejs/mesh3d.py +1 -0
  41. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/pythreejs/scatter3d.py +3 -0
  42. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/core/node_class.py +23 -0
  43. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/data/examples.py +3 -1
  44. plopp-25.10.0/src/plopp/graphics/colormapper.py +413 -0
  45. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/graphics/graphicalview.py +70 -21
  46. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/plotting/common.py +79 -5
  47. plopp-25.10.0/src/plopp/plotting/inspector.py +219 -0
  48. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/plotting/mesh3d.py +49 -16
  49. plopp-25.10.0/src/plopp/plotting/plot.py +190 -0
  50. plopp-25.10.0/src/plopp/plotting/scatter.py +202 -0
  51. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/plotting/scatter3d.py +52 -17
  52. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/plotting/slicer.py +137 -40
  53. plopp-25.10.0/src/plopp/plotting/superplot.py +147 -0
  54. plopp-25.10.0/src/plopp/plotting/xyplot.py +144 -0
  55. plopp-25.10.0/src/plopp/utils/__init__.pyi +7 -0
  56. plopp-25.10.0/src/plopp/utils/arg_parse.py +24 -0
  57. plopp-25.7.1/src/plopp/utils.py → plopp-25.10.0/src/plopp/utils/deprecation.py +0 -3
  58. plopp-25.10.0/src/plopp/widgets/__init__.py +6 -0
  59. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/widgets/slice.py +2 -3
  60. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/widgets/toolbar.py +2 -2
  61. {plopp-25.7.1 → plopp-25.10.0}/src/plopp.egg-info/PKG-INFO +3 -4
  62. {plopp-25.7.1 → plopp-25.10.0}/src/plopp.egg-info/SOURCES.txt +5 -1
  63. {plopp-25.7.1 → plopp-25.10.0}/src/plopp.egg-info/requires.txt +1 -1
  64. {plopp-25.7.1 → plopp-25.10.0}/tests/backends/matplotlib/mpl_image_test.py +7 -0
  65. {plopp-25.7.1 → plopp-25.10.0}/tests/backends/matplotlib/mpl_tiled_test.py +2 -2
  66. {plopp-25.7.1 → plopp-25.10.0}/tests/core/node_test.py +20 -0
  67. {plopp-25.7.1 → plopp-25.10.0}/tests/graphics/artists_test.py +38 -18
  68. {plopp-25.7.1 → plopp-25.10.0}/tests/graphics/canvas_test.py +4 -4
  69. {plopp-25.7.1 → plopp-25.10.0}/tests/graphics/colormapper_test.py +36 -4
  70. {plopp-25.7.1 → plopp-25.10.0}/tests/plotting/plot_1d_test.py +93 -0
  71. {plopp-25.7.1 → plopp-25.10.0}/tests/plotting/plot_2d_test.py +132 -0
  72. {plopp-25.7.1 → plopp-25.10.0}/tests/plotting/scatter_test.py +117 -2
  73. {plopp-25.7.1 → plopp-25.10.0}/tests/widgets/slice_test.py +2 -2
  74. {plopp-25.7.1 → plopp-25.10.0}/tox.ini +1 -1
  75. plopp-25.7.1/.github/workflows/python-version-ci +0 -1
  76. plopp-25.7.1/.python-version +0 -1
  77. plopp-25.7.1/src/plopp/graphics/colormapper.py +0 -285
  78. plopp-25.7.1/src/plopp/plotting/inspector.py +0 -115
  79. plopp-25.7.1/src/plopp/plotting/plot.py +0 -128
  80. plopp-25.7.1/src/plopp/plotting/scatter.py +0 -111
  81. plopp-25.7.1/src/plopp/plotting/superplot.py +0 -47
  82. plopp-25.7.1/src/plopp/plotting/xyplot.py +0 -61
  83. {plopp-25.7.1 → plopp-25.10.0}/.github/dependabot.yml +0 -0
  84. {plopp-25.7.1 → plopp-25.10.0}/.github/workflows/ci.yml +0 -0
  85. {plopp-25.7.1 → plopp-25.10.0}/.github/workflows/docs.yml +0 -0
  86. {plopp-25.7.1 → plopp-25.10.0}/.github/workflows/nightly_at_main.yml +0 -0
  87. {plopp-25.7.1 → plopp-25.10.0}/.github/workflows/nightly_at_main_lower_bound.yml +0 -0
  88. {plopp-25.7.1 → plopp-25.10.0}/.github/workflows/nightly_at_release.yml +0 -0
  89. {plopp-25.7.1 → plopp-25.10.0}/.github/workflows/test.yml +0 -0
  90. {plopp-25.7.1 → plopp-25.10.0}/.github/workflows/unpinned.yml +0 -0
  91. {plopp-25.7.1 → plopp-25.10.0}/.github/workflows/weekly_windows_macos.yml +0 -0
  92. {plopp-25.7.1 → plopp-25.10.0}/.gitignore +0 -0
  93. {plopp-25.7.1 → plopp-25.10.0}/CODE_OF_CONDUCT.md +0 -0
  94. {plopp-25.7.1 → plopp-25.10.0}/CONTRIBUTING.md +0 -0
  95. {plopp-25.7.1 → plopp-25.10.0}/LICENSE +0 -0
  96. {plopp-25.7.1 → plopp-25.10.0}/MANIFEST.in +0 -0
  97. {plopp-25.7.1 → plopp-25.10.0}/README.md +0 -0
  98. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/anaconda-icon.js +0 -0
  99. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/circle-exclamation.svg +0 -0
  100. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/custom.css +0 -0
  101. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/customization/custom-interfaces.png +0 -0
  102. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/customization/graph-node-tips.png +0 -0
  103. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/customization/subplots.png +0 -0
  104. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/customization/tweaking-figures.png +0 -0
  105. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/favicon.ico +0 -0
  106. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/gallery/README.txt +0 -0
  107. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/gallery/peeling-layers-thumbnail.png +0 -0
  108. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/gallery/scatter3d-with-slider-thumbnail.png +0 -0
  109. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/gallery/scatter3d-with-threshold-thumbnail.png +0 -0
  110. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/logo-dark.svg +0 -0
  111. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/logo-large-dark.svg +0 -0
  112. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/logo-large.svg +0 -0
  113. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/logo.svg +0 -0
  114. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/plotting/image-plot.png +0 -0
  115. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/plotting/inspector-plot.png +0 -0
  116. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/plotting/line-plot.png +0 -0
  117. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/plotting/mesh3d-plot.png +0 -0
  118. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/plotting/scatter-plot.png +0 -0
  119. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/plotting/scatter3d-plot.png +0 -0
  120. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/plotting/slicer-plot.png +0 -0
  121. {plopp-25.7.1 → plopp-25.10.0}/docs/_static/plotting/super-plot.png +0 -0
  122. {plopp-25.7.1 → plopp-25.10.0}/docs/_templates/class-template.rst +0 -0
  123. {plopp-25.7.1 → plopp-25.10.0}/docs/_templates/doc_version.html +0 -0
  124. {plopp-25.7.1 → plopp-25.10.0}/docs/_templates/module-template.rst +0 -0
  125. {plopp-25.7.1 → plopp-25.10.0}/docs/_templates/scipp-class-template.rst +0 -0
  126. {plopp-25.7.1 → plopp-25.10.0}/docs/_templates/scipp-module-template.rst +0 -0
  127. {plopp-25.7.1 → plopp-25.10.0}/docs/about/index.md +0 -0
  128. {plopp-25.7.1 → plopp-25.10.0}/docs/api-reference/index.md +0 -0
  129. {plopp-25.7.1 → plopp-25.10.0}/docs/api-reference/matplotlib.md +0 -0
  130. {plopp-25.7.1 → plopp-25.10.0}/docs/api-reference/plotly.md +0 -0
  131. {plopp-25.7.1 → plopp-25.10.0}/docs/api-reference/pythreejs.md +0 -0
  132. {plopp-25.7.1 → plopp-25.10.0}/docs/conf.py +0 -0
  133. {plopp-25.7.1 → plopp-25.10.0}/docs/customization/custom-interfaces.ipynb +0 -0
  134. {plopp-25.7.1 → plopp-25.10.0}/docs/customization/graph-node-tips.ipynb +0 -0
  135. {plopp-25.7.1 → plopp-25.10.0}/docs/customization/subplots.ipynb +0 -0
  136. {plopp-25.7.1 → plopp-25.10.0}/docs/developer/coding-conventions.md +0 -0
  137. {plopp-25.7.1 → plopp-25.10.0}/docs/developer/dependency-management.md +0 -0
  138. {plopp-25.7.1 → plopp-25.10.0}/docs/developer/index.md +0 -0
  139. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/index.ipynb +0 -0
  140. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/nyc-taxi.ipynb +0 -0
  141. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/polar-plots.ipynb +0 -0
  142. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/scatter3d-with-slider.ipynb +0 -0
  143. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/scatter3d-with-threshold.ipynb +0 -0
  144. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/tiled-random-samples.ipynb +0 -0
  145. {plopp-25.7.1 → plopp-25.10.0}/docs/gallery/updating-scatter.ipynb +0 -0
  146. {plopp-25.7.1 → plopp-25.10.0}/docs/getting-started/index.md +0 -0
  147. {plopp-25.7.1 → plopp-25.10.0}/docs/getting-started/installation.md +0 -0
  148. {plopp-25.7.1 → plopp-25.10.0}/docs/getting-started/numpy-pandas-xarray.ipynb +0 -0
  149. {plopp-25.7.1 → plopp-25.10.0}/docs/getting-started/saving-figures.ipynb +0 -0
  150. {plopp-25.7.1 → plopp-25.10.0}/docs/plotting/index.md +0 -0
  151. {plopp-25.7.1 → plopp-25.10.0}/docs/plotting/inspector-plot.ipynb +0 -0
  152. {plopp-25.7.1 → plopp-25.10.0}/docs/plotting/mesh3d-plot.ipynb +0 -0
  153. {plopp-25.7.1 → plopp-25.10.0}/docs/plotting/scatter-plot.ipynb +0 -0
  154. {plopp-25.7.1 → plopp-25.10.0}/docs/plotting/scatter3d-plot.ipynb +0 -0
  155. {plopp-25.7.1 → plopp-25.10.0}/docs/plotting/super-plot.ipynb +0 -0
  156. {plopp-25.7.1 → plopp-25.10.0}/requirements/base.in +0 -0
  157. {plopp-25.7.1 → plopp-25.10.0}/requirements/ci.in +0 -0
  158. {plopp-25.7.1 → plopp-25.10.0}/requirements/dev.in +0 -0
  159. {plopp-25.7.1 → plopp-25.10.0}/requirements/make_base.py +0 -0
  160. {plopp-25.7.1 → plopp-25.10.0}/requirements/mini.in +0 -0
  161. {plopp-25.7.1 → plopp-25.10.0}/requirements/mini.txt +0 -0
  162. {plopp-25.7.1 → plopp-25.10.0}/requirements/mypy.in +0 -0
  163. {plopp-25.7.1 → plopp-25.10.0}/requirements/noplotly.in +0 -0
  164. {plopp-25.7.1 → plopp-25.10.0}/requirements/noplotly.txt +0 -0
  165. {plopp-25.7.1 → plopp-25.10.0}/requirements/static.in +0 -0
  166. {plopp-25.7.1 → plopp-25.10.0}/requirements/test.in +0 -0
  167. {plopp-25.7.1 → plopp-25.10.0}/requirements/test.txt +0 -0
  168. {plopp-25.7.1 → plopp-25.10.0}/requirements/wheels.in +0 -0
  169. {plopp-25.7.1 → plopp-25.10.0}/resources/logo-plopp-2022.svg +0 -0
  170. {plopp-25.7.1 → plopp-25.10.0}/setup.cfg +0 -0
  171. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/__init__.py +0 -0
  172. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/__init__.py +0 -0
  173. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/common.py +0 -0
  174. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/matplotlib/__init__.py +0 -0
  175. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/matplotlib/fast_image.py +0 -0
  176. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/matplotlib/figure.py +0 -0
  177. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/matplotlib/image.py +0 -0
  178. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/matplotlib/mesh_image.py +0 -0
  179. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/matplotlib/utils.py +0 -0
  180. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/plotly/__init__.py +0 -0
  181. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/plotly/figure.py +0 -0
  182. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/plotly/line.py +0 -0
  183. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/pythreejs/__init__.py +0 -0
  184. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/pythreejs/figure.py +0 -0
  185. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/backends/pythreejs/outline.py +0 -0
  186. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/core/__init__.py +0 -0
  187. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/core/__init__.pyi +0 -0
  188. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/core/graph.py +0 -0
  189. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/core/helpers.py +0 -0
  190. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/core/limits.py +0 -0
  191. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/core/typing.py +0 -0
  192. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/core/utils.py +0 -0
  193. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/core/view.py +0 -0
  194. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/data/__init__.py +0 -0
  195. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/data/factory.py +0 -0
  196. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/data/testing.py +0 -0
  197. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/graphics/__init__.py +0 -0
  198. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/graphics/__init__.pyi +0 -0
  199. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/graphics/basefig.py +0 -0
  200. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/graphics/bbox.py +0 -0
  201. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/graphics/camera.py +0 -0
  202. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/graphics/figures.py +0 -0
  203. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/graphics/tiled.py +0 -0
  204. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/plotting/__init__.py +0 -0
  205. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/plotting/__init__.pyi +0 -0
  206. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/py.typed +0 -0
  207. {plopp-25.7.1/src/plopp/widgets → plopp-25.10.0/src/plopp/utils}/__init__.py +0 -0
  208. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/widgets/__init__.pyi +0 -0
  209. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/widgets/box.py +0 -0
  210. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/widgets/checkboxes.py +0 -0
  211. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/widgets/clip3d.py +0 -0
  212. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/widgets/debounce.py +0 -0
  213. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/widgets/drawing.py +0 -0
  214. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/widgets/linesave.py +0 -0
  215. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/widgets/style.py +0 -0
  216. {plopp-25.7.1 → plopp-25.10.0}/src/plopp/widgets/tools.py +0 -0
  217. {plopp-25.7.1 → plopp-25.10.0}/src/plopp.egg-info/dependency_links.txt +0 -0
  218. {plopp-25.7.1 → plopp-25.10.0}/src/plopp.egg-info/top_level.txt +0 -0
  219. {plopp-25.7.1 → plopp-25.10.0}/tests/backends/matplotlib/mpl_line_test.py +0 -0
  220. {plopp-25.7.1 → plopp-25.10.0}/tests/backends/matplotlib/mpl_plot_test.py +0 -0
  221. {plopp-25.7.1 → plopp-25.10.0}/tests/backends/matplotlib/mpl_scatter_test.py +0 -0
  222. {plopp-25.7.1 → plopp-25.10.0}/tests/backends/plotly/conftest.py +0 -0
  223. {plopp-25.7.1 → plopp-25.10.0}/tests/backends/plotly/plotly_line_test.py +0 -0
  224. {plopp-25.7.1 → plopp-25.10.0}/tests/backends/pythreejs/pythreejs_canvas_test.py +0 -0
  225. {plopp-25.7.1 → plopp-25.10.0}/tests/backends/pythreejs/pythreejs_scatter3d_test.py +0 -0
  226. {plopp-25.7.1 → plopp-25.10.0}/tests/conftest.py +0 -0
  227. {plopp-25.7.1 → plopp-25.10.0}/tests/core/graph_test.py +0 -0
  228. {plopp-25.7.1 → plopp-25.10.0}/tests/core/limits_test.py +0 -0
  229. {plopp-25.7.1 → plopp-25.10.0}/tests/core/utils_test.py +0 -0
  230. {plopp-25.7.1 → plopp-25.10.0}/tests/graphics/figures_test.py +0 -0
  231. {plopp-25.7.1 → plopp-25.10.0}/tests/high_level_test.py +0 -0
  232. {plopp-25.7.1 → plopp-25.10.0}/tests/minimal_plot_test.py +0 -0
  233. {plopp-25.7.1 → plopp-25.10.0}/tests/package_test.py +0 -0
  234. {plopp-25.7.1 → plopp-25.10.0}/tests/plotting/common_test.py +0 -0
  235. {plopp-25.7.1 → plopp-25.10.0}/tests/plotting/inspector_test.py +0 -0
  236. {plopp-25.7.1 → plopp-25.10.0}/tests/plotting/mesh3d_test.py +0 -0
  237. {plopp-25.7.1 → plopp-25.10.0}/tests/plotting/scatter3d_test.py +0 -0
  238. {plopp-25.7.1 → plopp-25.10.0}/tests/plotting/slicer_test.py +0 -0
  239. {plopp-25.7.1 → plopp-25.10.0}/tests/plotting/superplot_test.py +0 -0
  240. {plopp-25.7.1 → plopp-25.10.0}/tests/plotting/xyplot_test.py +0 -0
  241. {plopp-25.7.1 → plopp-25.10.0}/tests/widgets/box_test.py +0 -0
  242. {plopp-25.7.1 → plopp-25.10.0}/tests/widgets/checkboxes_test.py +0 -0
  243. {plopp-25.7.1 → plopp-25.10.0}/tests/widgets/clip3d_test.py +0 -0
@@ -1,9 +1,9 @@
1
1
  # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY
2
- _commit: 3561fcd
2
+ _commit: c3214e6
3
3
  _src_path: https://github.com/scipp/copier_template.git
4
4
  description: Visualization library for Scipp
5
5
  max_python: '3.13'
6
- min_python: '3.10'
6
+ min_python: '3.11'
7
7
  namespace_package: ''
8
8
  nightly_deps: scipp
9
9
  orgname: scipp
@@ -0,0 +1 @@
1
+ 3.11
@@ -33,7 +33,7 @@ jobs:
33
33
 
34
34
  upload_pypi:
35
35
  name: Deploy PyPI
36
- needs: build_wheels
36
+ needs: [build_wheels]
37
37
  runs-on: 'ubuntu-24.04'
38
38
  environment: release
39
39
  permissions:
@@ -44,7 +44,7 @@ jobs:
44
44
  - uses: pypa/gh-action-pypi-publish@v1.12.4
45
45
 
46
46
  docs:
47
- needs: upload_pypi
47
+ needs: [upload_pypi]
48
48
  uses: ./.github/workflows/docs.yml
49
49
  with:
50
50
  publish: ${{ github.event_name == 'release' && github.event.action == 'published' }}
@@ -10,7 +10,6 @@ repos:
10
10
  - id: check-merge-conflict
11
11
  - id: check-toml
12
12
  - id: check-yaml
13
- exclude: conda/meta.yaml
14
13
  - id: detect-private-key
15
14
  - id: trailing-whitespace
16
15
  args: [ --markdown-linebreak-ext=md ]
@@ -0,0 +1 @@
1
+ 3.11
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plopp
3
- Version: 25.7.1
3
+ Version: 25.10.0
4
4
  Summary: Visualization library for Scipp
5
5
  Author: Scipp contributors
6
6
  License-Expression: BSD-3-Clause
@@ -12,13 +12,12 @@ Classifier: Natural Language :: English
12
12
  Classifier: Operating System :: OS Independent
13
13
  Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Programming Language :: Python :: 3 :: Only
15
- Classifier: Programming Language :: Python :: 3.10
16
15
  Classifier: Programming Language :: Python :: 3.11
17
16
  Classifier: Programming Language :: Python :: 3.12
18
17
  Classifier: Programming Language :: Python :: 3.13
19
18
  Classifier: Topic :: Scientific/Engineering
20
19
  Classifier: Typing :: Typed
21
- Requires-Python: >=3.10
20
+ Requires-Python: >=3.11
22
21
  Description-Content-Type: text/markdown
23
22
  License-File: LICENSE
24
23
  Requires-Dist: lazy-loader>=0.4
@@ -41,7 +40,7 @@ Requires-Dist: mpltoolbox>=24.6.0; extra == "test"
41
40
  Requires-Dist: pandas>=2.2.2; extra == "test"
42
41
  Requires-Dist: plotly>=5.15.0; extra == "test"
43
42
  Requires-Dist: pooch>=1.5; extra == "test"
44
- Requires-Dist: pyarrow>=10.0.0; extra == "test"
43
+ Requires-Dist: pyarrow>=13.0.0; extra == "test"
45
44
  Requires-Dist: pytest>=7.0; extra == "test"
46
45
  Requires-Dist: pythreejs>=2.4.1; extra == "test"
47
46
  Requires-Dist: scipp>=25.5.0; extra == "test"
@@ -0,0 +1,242 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "0",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Animations\n",
9
+ "\n",
10
+ "To create animations with Plopp, we make use of the [node mechanism](custom-interfaces.ipynb)\n",
11
+ "and leverage [Matplotlib's support for animations](https://matplotlib.org/stable/users/explain/animations/animations.html).\n",
12
+ "\n",
13
+ "## 1D animations"
14
+ ]
15
+ },
16
+ {
17
+ "cell_type": "code",
18
+ "execution_count": null,
19
+ "id": "1",
20
+ "metadata": {},
21
+ "outputs": [],
22
+ "source": [
23
+ "import plopp as pp\n",
24
+ "from plopp.data.examples import three_bands\n",
25
+ "import matplotlib.animation as animation"
26
+ ]
27
+ },
28
+ {
29
+ "cell_type": "markdown",
30
+ "id": "2",
31
+ "metadata": {},
32
+ "source": [
33
+ "We load the data and display it in a figure:"
34
+ ]
35
+ },
36
+ {
37
+ "cell_type": "code",
38
+ "execution_count": null,
39
+ "id": "3",
40
+ "metadata": {},
41
+ "outputs": [],
42
+ "source": [
43
+ "da = three_bands()\n",
44
+ "da.plot(logc=True)"
45
+ ]
46
+ },
47
+ {
48
+ "cell_type": "markdown",
49
+ "id": "4",
50
+ "metadata": {},
51
+ "source": [
52
+ "We now create an animation where we are scanning the vertical `y` direction of the data,\n",
53
+ "making a plot of each slice in each step of the animation.\n",
54
+ "\n",
55
+ "On every call to the `update` function passed to Matplotlib's `FuncAnimation`,\n",
56
+ "we update the index node and notify the children nodes of the change.\n",
57
+ "This updates the figure at every step.\n",
58
+ "\n",
59
+ "Finally, we save the animation to a `.gif` file.\n",
60
+ "See [here](https://matplotlib.org/stable/users/explain/animations/animations.html#saving-animations)\n",
61
+ "for the possible formats animations can be saved in."
62
+ ]
63
+ },
64
+ {
65
+ "cell_type": "code",
66
+ "execution_count": null,
67
+ "id": "5",
68
+ "metadata": {},
69
+ "outputs": [],
70
+ "source": [
71
+ "data_node = pp.Node(da)\n",
72
+ "index_node = pp.Node(0)\n",
73
+ "# Here, 'y' is the dimension you want to slice\n",
74
+ "slice_node = pp.Node(lambda da, ind: da[\"y\", ind], da=data_node, ind=index_node)\n",
75
+ "\n",
76
+ "f = pp.linefigure(slice_node, ymin=-1, ymax=200)\n",
77
+ "\n",
78
+ "\n",
79
+ "def update(frame):\n",
80
+ " index_node.func = lambda: frame\n",
81
+ " index_node.notify_children(\"\")\n",
82
+ "\n",
83
+ "\n",
84
+ "ani = animation.FuncAnimation(fig=f.fig, func=update, frames=200, interval=100)\n",
85
+ "ani.save(filename=\"animation_1d.gif\", writer=\"pillow\")"
86
+ ]
87
+ },
88
+ {
89
+ "cell_type": "markdown",
90
+ "id": "6",
91
+ "metadata": {},
92
+ "source": [
93
+ "### Displaying the animation in the notebook\n",
94
+ "\n",
95
+ "There are (at least) three different ways to display the animation directly in the notebook.\n",
96
+ "\n",
97
+ "#### Markdown\n",
98
+ "\n",
99
+ "The first is to create a markdown cell and just display the image (note that refreshing browser window may be required in some cases):\n",
100
+ "\n",
101
+ "```\n",
102
+ "![ani](animation_1d.gif)\n",
103
+ "```"
104
+ ]
105
+ },
106
+ {
107
+ "cell_type": "markdown",
108
+ "id": "7",
109
+ "metadata": {},
110
+ "source": [
111
+ "![ani](animation_1d.gif)"
112
+ ]
113
+ },
114
+ {
115
+ "cell_type": "markdown",
116
+ "id": "8",
117
+ "metadata": {},
118
+ "source": [
119
+ "#### Display the interactive figure\n",
120
+ "\n",
121
+ "The second method is to simply display the figure `f` define above,\n",
122
+ "but **this only works if `%matplotlib widget` is enabled** (and does not work in the rendered docs, hence not shown here).\n",
123
+ "The advantage of this method is that it does not require first saving the animation to disk.\n",
124
+ "\n",
125
+ "#### Ipywidgets\n",
126
+ "\n",
127
+ "The third method is to use `ipywidgets` to display the image in the file:"
128
+ ]
129
+ },
130
+ {
131
+ "cell_type": "code",
132
+ "execution_count": null,
133
+ "id": "9",
134
+ "metadata": {},
135
+ "outputs": [],
136
+ "source": [
137
+ "import ipywidgets as ipw\n",
138
+ "\n",
139
+ "ipw.Image(value=open(\"animation_1d.gif\", \"rb\").read(), format=\"gif\")"
140
+ ]
141
+ },
142
+ {
143
+ "cell_type": "markdown",
144
+ "id": "10",
145
+ "metadata": {},
146
+ "source": [
147
+ "## 2D animations\n",
148
+ "\n",
149
+ "We can create a similar animation on 2d images,\n",
150
+ "where instead of slicing the vertical dimension,\n",
151
+ "we collect more and more signal as time progresses.\n",
152
+ "\n",
153
+ "Every time the `update` function is called,\n",
154
+ "new data is created and added to the current data."
155
+ ]
156
+ },
157
+ {
158
+ "cell_type": "code",
159
+ "execution_count": null,
160
+ "id": "11",
161
+ "metadata": {},
162
+ "outputs": [],
163
+ "source": [
164
+ "da = three_bands(npeaks=20, per_peak=500, spread=30.0)\n",
165
+ "data_node = pp.Node(da)\n",
166
+ "\n",
167
+ "f = pp.imagefigure(data_node, cbar=True, cmin=30, cmax=400, logc=True)\n",
168
+ "\n",
169
+ "\n",
170
+ "def update(frame):\n",
171
+ " # Make new data and add it to the current data.\n",
172
+ " # The current data is obtained by calling the `data_node()`\n",
173
+ " new = three_bands(npeaks=20, per_peak=500, spread=30.0) + data_node()\n",
174
+ " data_node.func = lambda: new\n",
175
+ " data_node.notify_children(\"\")\n",
176
+ "\n",
177
+ "\n",
178
+ "ani = animation.FuncAnimation(fig=f.fig, func=update, frames=80, interval=100)\n",
179
+ "ani.save(filename=\"animation_2d.gif\", writer=\"pillow\")"
180
+ ]
181
+ },
182
+ {
183
+ "cell_type": "markdown",
184
+ "id": "12",
185
+ "metadata": {},
186
+ "source": [
187
+ "We now display the resulting animation (using markdown):\n",
188
+ "\n",
189
+ "![ani2](animation_2d.gif)"
190
+ ]
191
+ },
192
+ {
193
+ "cell_type": "markdown",
194
+ "id": "13",
195
+ "metadata": {},
196
+ "source": [
197
+ "## 3D animations\n",
198
+ "\n",
199
+ "Animations on 3D plots are currently not supported.\n",
200
+ "\n",
201
+ "The best way to achieve this would be to record a screencast while interacting with a 3D scene."
202
+ ]
203
+ },
204
+ {
205
+ "cell_type": "code",
206
+ "execution_count": null,
207
+ "id": "14",
208
+ "metadata": {
209
+ "nbsphinx": "hidden"
210
+ },
211
+ "outputs": [],
212
+ "source": [
213
+ "# This cell is used to generate the thumbnail for the docs.\n",
214
+ "# It is hidden from the online documentation.\n",
215
+ "import shutil\n",
216
+ "\n",
217
+ "shutil.copyfile(\"animation_2d.gif\", \"../_static/customization/animation_2d.gif\")"
218
+ ]
219
+ }
220
+ ],
221
+ "metadata": {
222
+ "kernelspec": {
223
+ "display_name": "Python 3 (ipykernel)",
224
+ "language": "python",
225
+ "name": "python3"
226
+ },
227
+ "language_info": {
228
+ "codemirror_mode": {
229
+ "name": "ipython",
230
+ "version": 3
231
+ },
232
+ "file_extension": ".py",
233
+ "mimetype": "text/x-python",
234
+ "name": "python",
235
+ "nbconvert_exporter": "python",
236
+ "pygments_lexer": "ipython3",
237
+ "version": "3.12.7"
238
+ }
239
+ },
240
+ "nbformat": 4,
241
+ "nbformat_minor": 5
242
+ }
@@ -30,6 +30,12 @@
30
30
 
31
31
  :::
32
32
 
33
+ ::::{grid-item-card} Animations
34
+ :link: animations.ipynb
35
+ :img-bottom: ../_static/customization/animation_2d.gif
36
+
37
+ :::
38
+
33
39
  ::::
34
40
 
35
41
  ```{toctree}
@@ -41,4 +47,5 @@ subplots
41
47
  tweaking-figures
42
48
  custom-interfaces
43
49
  graph-node-tips
50
+ animations
44
51
  ```
@@ -77,8 +77,7 @@
77
77
  },
78
78
  "outputs": [],
79
79
  "source": [
80
- "p = pp.plot(da)\n",
81
- "p"
80
+ "pp.plot(da)"
82
81
  ]
83
82
  },
84
83
  {
@@ -92,7 +91,7 @@
92
91
  "tags": []
93
92
  },
94
93
  "source": [
95
- "To change the label of the vertical axis, use the `.canvas.ylabel` property on the plot object:"
94
+ "To change the label of the horizontal or vertical axes, use the `xlabel/ylabel` arguments:"
96
95
  ]
97
96
  },
98
97
  {
@@ -108,8 +107,7 @@
108
107
  },
109
108
  "outputs": [],
110
109
  "source": [
111
- "p.canvas.ylabel = 'Phase of sound wave'\n",
112
- "p"
110
+ "pp.plot(da, xlabel=\"Time (milliseconds)\", ylabel=\"Phase of sound wave\")"
113
111
  ]
114
112
  },
115
113
  {
@@ -145,6 +143,7 @@
145
143
  ]
146
144
  },
147
145
  {
146
+ "attachments": {},
148
147
  "cell_type": "markdown",
149
148
  "id": "9",
150
149
  "metadata": {
@@ -155,12 +154,10 @@
155
154
  "tags": []
156
155
  },
157
156
  "source": [
158
- "### Setting the axis range\n",
159
- "\n",
160
- "#### Vertical axis\n",
157
+ "### Setting the axes ranges\n",
161
158
  "\n",
162
- "Changing the range of the vertical axis is done using the `vmin` and `vmax` arguments\n",
163
- "(note that if only one of the two is given, then the other will be automatically determined from the data plotted)."
159
+ "Changing the range of the horizontal or vertical axes is done using the `xmin/xmax` and `ymax/ymax` arguments, respectively.\n",
160
+ "If only the `min` or `max` is given, then the other will be automatically determined from the data plotted."
164
161
  ]
165
162
  },
166
163
  {
@@ -170,7 +167,12 @@
170
167
  "metadata": {},
171
168
  "outputs": [],
172
169
  "source": [
173
- "pp.plot(da, vmin=sc.scalar(-0.5, unit='m/s'), vmax=sc.scalar(1.5, unit='m/s'))"
170
+ "pp.plot(\n",
171
+ " da,\n",
172
+ " xmin=sc.scalar(10, unit='m'),\n",
173
+ " ymin=sc.scalar(-0.5, unit='m/s'),\n",
174
+ " ymax=sc.scalar(1.5, unit='m/s'),\n",
175
+ ")"
174
176
  ]
175
177
  },
176
178
  {
@@ -185,11 +187,7 @@
185
187
  },
186
188
  "source": [
187
189
  "Note that if the unit in the supplied limits is not identical to the data units, an on-the-fly conversion is attempted.\n",
188
- "It is also possible to omit the units altogether, in which case it is assumed the unit is the same as the data unit.\n",
189
- "\n",
190
- "#### Horizontal axis\n",
191
- "\n",
192
- "The easiest way to set the range of the horizontal axis is to slice the data before plotting:"
190
+ "It is also possible to omit the units altogether, in which case it is assumed the unit is the same as the data unit:"
193
191
  ]
194
192
  },
195
193
  {
@@ -205,34 +203,13 @@
205
203
  },
206
204
  "outputs": [],
207
205
  "source": [
208
- "pp.plot(da[10:40])"
206
+ "pp.plot(da, xmin=10, xmax=45)"
209
207
  ]
210
208
  },
211
209
  {
210
+ "attachments": {},
212
211
  "cell_type": "markdown",
213
212
  "id": "13",
214
- "metadata": {},
215
- "source": [
216
- "Note that this will add some padding around the plotted data points.\n",
217
- "\n",
218
- "If you wish to have precise control over the limits, you can use the lower-level `canvas.xrange` property:"
219
- ]
220
- },
221
- {
222
- "cell_type": "code",
223
- "execution_count": null,
224
- "id": "14",
225
- "metadata": {},
226
- "outputs": [],
227
- "source": [
228
- "p = da.plot()\n",
229
- "p.canvas.xrange = [10, 40]\n",
230
- "p"
231
- ]
232
- },
233
- {
234
- "cell_type": "markdown",
235
- "id": "15",
236
213
  "metadata": {
237
214
  "editable": true,
238
215
  "slideshow": {
@@ -241,34 +218,21 @@
241
218
  "tags": []
242
219
  },
243
220
  "source": [
244
- "Note that `camvas.yrange` is also available, and is equivalent to using the `vmin` and `vmax` arguments.\n",
245
- "\n",
246
221
  "## Further modifications\n",
247
222
  "\n",
248
223
  "Instead of providing keyword arguments for tweaking every aspect of the figures,\n",
249
224
  "we provide accessors to the underlying Matplotlib `Figure` and `Axes` objects,\n",
250
- "that can then directly be used to make the required modifications."
251
- ]
252
- },
253
- {
254
- "cell_type": "markdown",
255
- "id": "16",
256
- "metadata": {
257
- "editable": true,
258
- "slideshow": {
259
- "slide_type": ""
260
- },
261
- "tags": []
262
- },
263
- "source": [
225
+ "that can then directly be used to make the required modifications.\n",
226
+ "\n",
264
227
  "### Tick locations and labels\n",
228
+ "\n",
265
229
  "To change the location of the ticks, as well as their labels, we directly access the Matplotlib axes via the `.ax` property of the figure:"
266
230
  ]
267
231
  },
268
232
  {
269
233
  "cell_type": "code",
270
234
  "execution_count": null,
271
- "id": "17",
235
+ "id": "14",
272
236
  "metadata": {
273
237
  "editable": true,
274
238
  "slideshow": {
@@ -286,7 +250,7 @@
286
250
  },
287
251
  {
288
252
  "cell_type": "markdown",
289
- "id": "18",
253
+ "id": "15",
290
254
  "metadata": {},
291
255
  "source": [
292
256
  "### Axes placement\n",
@@ -298,7 +262,7 @@
298
262
  {
299
263
  "cell_type": "code",
300
264
  "execution_count": null,
301
- "id": "19",
265
+ "id": "16",
302
266
  "metadata": {},
303
267
  "outputs": [],
304
268
  "source": [
@@ -319,7 +283,7 @@
319
283
  },
320
284
  {
321
285
  "cell_type": "markdown",
322
- "id": "20",
286
+ "id": "17",
323
287
  "metadata": {},
324
288
  "source": [
325
289
  "It is also possible to control the placement of the colorbar for image plots using the `cax` argument:"
@@ -328,7 +292,7 @@
328
292
  {
329
293
  "cell_type": "code",
330
294
  "execution_count": null,
331
- "id": "21",
295
+ "id": "18",
332
296
  "metadata": {},
333
297
  "outputs": [],
334
298
  "source": [
@@ -357,7 +321,8 @@
357
321
  "mimetype": "text/x-python",
358
322
  "name": "python",
359
323
  "nbconvert_exporter": "python",
360
- "pygments_lexer": "ipython3"
324
+ "pygments_lexer": "ipython3",
325
+ "version": "3.12.7"
361
326
  }
362
327
  },
363
328
  "nbformat": 4,
@@ -40,7 +40,7 @@ Alternatively, if you want a different workflow, take a look at ``tox.ini`` or `
40
40
  Run the tests using
41
41
 
42
42
  ```sh
43
- tox -e py310
43
+ tox -e py311
44
44
  ```
45
45
 
46
46
  (or just `tox` if you want to run all environments).
@@ -181,7 +181,7 @@
181
181
  "\n",
182
182
  "masking_node = pp.Node(apply_masks, data_node)\n",
183
183
  "\n",
184
- "fig = pp.imagefigure(masking_node, norm='log')\n",
184
+ "fig = pp.imagefigure(masking_node, logc=True)\n",
185
185
  "\n",
186
186
  "r = RectangleTool(\n",
187
187
  " figure=fig, input_node=data_node, func=define_mask, destination=masking_node\n",
@@ -123,7 +123,7 @@
123
123
  "sum_node = pp.Node(sc.sum, mask_node, dim=ydim)\n",
124
124
  "\n",
125
125
  "# Make figures\n",
126
- "image = pp.imagefigure(mask_node, norm='log')\n",
126
+ "image = pp.imagefigure(mask_node, logc=True)\n",
127
127
  "lines = pp.linefigure(sum_node, grid=True, ls='solid', marker='')\n",
128
128
  "ipw.VBox([slider, image, lines])"
129
129
  ]
@@ -103,7 +103,7 @@
103
103
  "b = da[(da.data > sc.scalar(0.002)) & (da.data < sc.scalar(0.005))]\n",
104
104
  "\n",
105
105
  "# Display both on the same scatter plot\n",
106
- "p = pp.scatter3d({'a': a, 'b': b}, pos='position', norm='log', cbar=True)\n",
106
+ "p = pp.scatter3d({'a': a, 'b': b}, pos='position', logc=True, cbar=True)\n",
107
107
  "\n",
108
108
  "# Extract the point clouds from the final plot and set a lower opacity on the second point cloud\n",
109
109
  "clouds = list(p.artists.values())\n",
@@ -154,7 +154,7 @@
154
154
  "\n",
155
155
  "data_node = pp.Node(da)\n",
156
156
  "\n",
157
- "f2d = pp.imagefigure(data_node, norm='log')\n",
157
+ "f2d = pp.imagefigure(data_node, logc=True)\n",
158
158
  "f1d = pp.linefigure()\n",
159
159
  "\n",
160
160
  "r = RectangleTool(figure=f2d, input_node=data_node, func=vertical_sum, destination=f1d)\n",
@@ -101,7 +101,7 @@
101
101
  "stream_node = pp.Node(data, iteration=play_node)\n",
102
102
  "\n",
103
103
  "# Plot on a figure\n",
104
- "fig = pp.imagefigure(stream_node, norm=\"log\", cbar=True)"
104
+ "fig = pp.imagefigure(stream_node, logc=True, cbar=True)"
105
105
  ]
106
106
  },
107
107
  {
@@ -251,8 +251,7 @@
251
251
  "source": [
252
252
  "## Logarithmic scale\n",
253
253
  "\n",
254
- "Data can be plotted on a logarithmic scale on one or both axes.\n",
255
- "For the independent axis (the coordinate axis, i.e., the horizontal axis) this can be set using the `scale` option:"
254
+ "Data can be plotted on a logarithmic scale on one or both axes using the `logx` and `logy` arguments:"
256
255
  ]
257
256
  },
258
257
  {
@@ -261,7 +260,7 @@
261
260
  "metadata": {},
262
261
  "outputs": [],
263
262
  "source": [
264
- "da1.plot(scale={'x': 'log'})"
263
+ "da1.plot(logx=True)"
265
264
  ]
266
265
  },
267
266
  {
@@ -270,21 +269,7 @@
270
269
  "metadata": {},
271
270
  "outputs": [],
272
271
  "source": [
273
- "da.plot(scale={'x': 'log', 'time': 'log'})"
274
- ]
275
- },
276
- {
277
- "cell_type": "markdown",
278
- "metadata": {},
279
- "source": [
280
- "Note the the keys in the `scale` dict are dimension labels and *not* \"x\" and \"y\" as Matplotlib would refer to its axes."
281
- ]
282
- },
283
- {
284
- "cell_type": "markdown",
285
- "metadata": {},
286
- "source": [
287
- "For the dependent axis (the data axis, i.e., vertical axis) use the `norm` option:"
272
+ "(100 * (da1 - da1.min())).plot(logy=True)"
288
273
  ]
289
274
  },
290
275
  {
@@ -293,7 +278,7 @@
293
278
  "metadata": {},
294
279
  "outputs": [],
295
280
  "source": [
296
- "(100 * (da1 - da1.min())).plot(norm='log')"
281
+ "da.plot(logx=True, logy=True)"
297
282
  ]
298
283
  }
299
284
  ],
@@ -312,7 +297,8 @@
312
297
  "mimetype": "text/x-python",
313
298
  "name": "python",
314
299
  "nbconvert_exporter": "python",
315
- "pygments_lexer": "ipython3"
300
+ "pygments_lexer": "ipython3",
301
+ "version": "3.12.7"
316
302
  }
317
303
  },
318
304
  "nbformat": 4,
@@ -154,6 +154,10 @@
154
154
 
155
155
  :::
156
156
 
157
+ :::{grid-item-card} Animations
158
+ :link: customization/animations.ipynb
159
+ :img-bottom: _static/customization/animation_2d.gif
160
+
157
161
  ::::
158
162
 
159
163
  ```{toctree}