hvplot 0.12.1__tar.gz → 0.12.2__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 (255) hide show
  1. {hvplot-0.12.1 → hvplot-0.12.2}/PKG-INFO +12 -11
  2. {hvplot-0.12.1 → hvplot-0.12.2}/doc/conf.py +1 -1
  3. hvplot-0.12.2/doc/conftest.py +146 -0
  4. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_options/axis.ipynb +3 -1
  5. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_options/color_colormap.ipynb +40 -15
  6. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_options/data.ipynb +49 -0
  7. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_options/geographic.ipynb +31 -0
  8. {hvplot-0.12.1 → hvplot-0.12.2}/doc/releases.md +35 -0
  9. hvplot-0.12.2/doc/roadmap.md +70 -0
  10. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/NetworkX.ipynb +5 -4
  11. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/_version.py +2 -2
  12. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/converter.py +84 -39
  13. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/plotting/core.py +31 -13
  14. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testcharts.py +107 -0
  15. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testfugue.py +3 -0
  16. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testgeo.py +11 -9
  17. hvplot-0.12.2/hvplot/tests/testgeowithoutgv.py +211 -0
  18. hvplot-0.12.2/hvplot/tests/testibis.py +30 -0
  19. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testinteractive.py +2 -2
  20. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testpatch.py +2 -0
  21. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testplotting.py +2 -0
  22. hvplot-0.12.2/hvplot/tests/testtransforms.py +71 -0
  23. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testutil.py +240 -1
  24. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/util.py +105 -6
  25. {hvplot-0.12.1 → hvplot-0.12.2}/pyproject.toml +11 -4
  26. hvplot-0.12.1/doc/conftest.py +0 -76
  27. hvplot-0.12.1/doc/roadmap.md +0 -92
  28. hvplot-0.12.1/hvplot/tests/testgeowithoutgv.py +0 -106
  29. hvplot-0.12.1/hvplot/tests/testibis.py +0 -17
  30. hvplot-0.12.1/hvplot/tests/testtransforms.py +0 -39
  31. {hvplot-0.12.1 → hvplot-0.12.2}/.gitignore +0 -0
  32. {hvplot-0.12.1 → hvplot-0.12.2}/LICENSE +0 -0
  33. {hvplot-0.12.1 → hvplot-0.12.2}/README.md +0 -0
  34. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_ext/backend_styling_options.py +0 -0
  35. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_ext/plotting_options_table.py +0 -0
  36. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/custom.css +0 -0
  37. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/favicon.ico +0 -0
  38. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/bokeh.gif +0 -0
  39. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/dask.gif +0 -0
  40. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/explorer.gif +0 -0
  41. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/geo.gif +0 -0
  42. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/geopandas.gif +0 -0
  43. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/intake.gif +0 -0
  44. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/interactive_hvplot.gif +0 -0
  45. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/interactive_pandas.gif +0 -0
  46. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/interactive_xarray.gif +0 -0
  47. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/large_data.gif +0 -0
  48. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/layout.gif +0 -0
  49. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/matplotlib.png +0 -0
  50. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/networkx.gif +0 -0
  51. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/overlay.png +0 -0
  52. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/pandas.gif +0 -0
  53. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/plotly.gif +0 -0
  54. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/widgets.gif +0 -0
  55. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/home/xarray.gif +0 -0
  56. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/images/heat_and_trees.png +0 -0
  57. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/images/portfolio.png +0 -0
  58. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/logo.png +0 -0
  59. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/logo_horizontal.png +0 -0
  60. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/logo_horizontal.svg +0 -0
  61. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/logo_stacked.svg +0 -0
  62. {hvplot-0.12.1 → hvplot-0.12.2}/doc/_static/patch_templates/sourcelink.html +0 -0
  63. {hvplot-0.12.1 → hvplot-0.12.2}/doc/about.md +0 -0
  64. {hvplot-0.12.1 → hvplot-0.12.2}/doc/assets/console.png +0 -0
  65. {hvplot-0.12.1 → hvplot-0.12.2}/doc/assets/console_server.gif +0 -0
  66. {hvplot-0.12.1 → hvplot-0.12.2}/doc/assets/diagram.png +0 -0
  67. {hvplot-0.12.1 → hvplot-0.12.2}/doc/assets/diagram.svg +0 -0
  68. {hvplot-0.12.1 → hvplot-0.12.2}/doc/assets/hvplot-wm.png +0 -0
  69. {hvplot-0.12.1 → hvplot-0.12.2}/doc/assets/streamz_demo.gif +0 -0
  70. {hvplot-0.12.1 → hvplot-0.12.2}/doc/developer_guide.md +0 -0
  71. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/annotations/horizontal_bar_with_labels.ipynb +0 -0
  72. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/basic-charts/simple_area.ipynb +0 -0
  73. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/basic-charts/simple_bar.ipynb +0 -0
  74. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/basic-charts/simple_boxplot.ipynb +0 -0
  75. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/basic-charts/simple_heatmap.ipynb +0 -0
  76. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/basic-charts/simple_line.ipynb +0 -0
  77. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/basic-charts/simple_scatter.ipynb +0 -0
  78. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/basic-charts/simple_step.ipynb +0 -0
  79. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/big-data/large_vectorfield_downsampled.ipynb +0 -0
  80. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/categorical/category_bar.ipynb +0 -0
  81. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/categorical/category_heatmap.ipynb +0 -0
  82. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/categorical/grouped_bar.ipynb +0 -0
  83. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/categorical/horizontal_bar.ipynb +0 -0
  84. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/categorical/lollipop_plot.ipynb +0 -0
  85. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/categorical/stacked_bar.ipynb +0 -0
  86. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/categorical/strip_jitter.ipynb +0 -0
  87. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/geospatial/datashade_map.ipynb +0 -0
  88. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/geospatial/geopoints.ipynb +0 -0
  89. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/geospatial/map_overlay.ipynb +0 -0
  90. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/geospatial/paths_labels.ipynb +0 -0
  91. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/geospatial/polygon_map.ipynb +0 -0
  92. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/gridded/contour.ipynb +0 -0
  93. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/gridded/contourf.ipynb +0 -0
  94. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/gridded/image.ipynb +0 -0
  95. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/gridded/quadmesh.ipynb +0 -0
  96. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/gridded/rgb.ipynb +0 -0
  97. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/gridded/rgb_satellite_imagery.ipynb +0 -0
  98. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/gridded/vectorfield.ipynb +0 -0
  99. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/interactivity/app_bind.ipynb +0 -0
  100. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/interactivity/app_rx.ipynb +0 -0
  101. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/interactivity/groupby_widget.ipynb +0 -0
  102. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/multidimensional/andrews_curves.ipynb +0 -0
  103. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/multidimensional/groupby.ipynb +0 -0
  104. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/multidimensional/parallel_coordinates.ipynb +0 -0
  105. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/multidimensional/scatter_matrix.ipynb +0 -0
  106. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/multidimensional/scatter_multi.ipynb +0 -0
  107. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/statistical/bar_with_error_bars.ipynb +0 -0
  108. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/statistical/bivariate.ipynb +0 -0
  109. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/statistical/boxplot.ipynb +0 -0
  110. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/statistical/correlation_heatmap.ipynb +0 -0
  111. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/statistical/density_plot.ipynb +0 -0
  112. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/statistical/hexbin.ipynb +0 -0
  113. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/statistical/histogram.ipynb +0 -0
  114. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/statistical/horizontal_errorbars.ipynb +0 -0
  115. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/statistical/violin.ipynb +0 -0
  116. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/statistical/violin_scatter.ipynb +0 -0
  117. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/time-series/area_time_series.ipynb +0 -0
  118. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/time-series/dual_axis_timeseries.ipynb +0 -0
  119. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/time-series/forecast_bands.ipynb +0 -0
  120. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/time-series/lag_plot.ipynb +0 -0
  121. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/time-series/multi_series_line.ipynb +0 -0
  122. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/time-series/ohlc.ipynb +0 -0
  123. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/time-series/step_time_series.ipynb +0 -0
  124. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/time-series/time_series_bar.ipynb +0 -0
  125. {hvplot-0.12.1 → hvplot-0.12.2}/doc/gallery/time-series/time_series_line.ipynb +0 -0
  126. {hvplot-0.12.1 → hvplot-0.12.2}/doc/governance/project-docs/CONTRIBUTING.md +0 -0
  127. {hvplot-0.12.1 → hvplot-0.12.2}/doc/governance/project-docs/GOVERNANCE.md +0 -0
  128. {hvplot-0.12.1 → hvplot-0.12.2}/doc/governance/project-docs/LICENSE.md +0 -0
  129. {hvplot-0.12.1 → hvplot-0.12.2}/doc/governance/project-docs/MEMBERS.md +0 -0
  130. {hvplot-0.12.1 → hvplot-0.12.2}/doc/index.md +0 -0
  131. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/index.md +0 -0
  132. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.area.ipynb +0 -0
  133. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.bar.ipynb +0 -0
  134. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.barh.ipynb +0 -0
  135. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.bivariate.ipynb +0 -0
  136. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.box.ipynb +0 -0
  137. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.contour.ipynb +0 -0
  138. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.contourf.ipynb +0 -0
  139. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.dataset.ipynb +0 -0
  140. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.density.md +0 -0
  141. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.errorbars.ipynb +0 -0
  142. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.explorer.ipynb +0 -0
  143. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.heatmap.ipynb +0 -0
  144. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.hexbin.ipynb +0 -0
  145. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.hist.ipynb +0 -0
  146. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.image.ipynb +0 -0
  147. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.kde.ipynb +0 -0
  148. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.labels.ipynb +0 -0
  149. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.line.ipynb +0 -0
  150. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.ohlc.ipynb +0 -0
  151. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.paths.ipynb +0 -0
  152. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.points.ipynb +0 -0
  153. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.polygons.ipynb +0 -0
  154. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.quadmesh.ipynb +0 -0
  155. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.rgb.ipynb +0 -0
  156. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.scatter.ipynb +0 -0
  157. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.step.ipynb +0 -0
  158. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.table.ipynb +0 -0
  159. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.vectorfield.ipynb +0 -0
  160. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.hvPlot.violin.ipynb +0 -0
  161. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.plotting.andrews_curves.ipynb +0 -0
  162. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.plotting.lag_plot.ipynb +0 -0
  163. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.plotting.parallel_coordinates.ipynb +0 -0
  164. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api/manual/hvplot.plotting.scatter_matrix.ipynb +0 -0
  165. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api_compatibility/index.md +0 -0
  166. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api_compatibility/pandas/Pandas_API.ipynb +0 -0
  167. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/api_compatibility/pandas/index.ipynb +0 -0
  168. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/data_libraries.ipynb +0 -0
  169. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/deprecations.md +0 -0
  170. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/index.md +0 -0
  171. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/installation.md +0 -0
  172. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_extensions.ipynb +0 -0
  173. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_options/index.md +0 -0
  174. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_options/interactivity.ipynb +0 -0
  175. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_options/legend.ipynb +0 -0
  176. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_options/resampling.ipynb +0 -0
  177. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_options/size_layout.ipynb +0 -0
  178. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_options/streaming.ipynb +0 -0
  179. {hvplot-0.12.1 → hvplot-0.12.2}/doc/ref/plotting_options/styling.ipynb +0 -0
  180. {hvplot-0.12.1 → hvplot-0.12.2}/doc/topics.html +0 -0
  181. {hvplot-0.12.1 → hvplot-0.12.2}/doc/tutorials/getting_started.ipynb +0 -0
  182. {hvplot-0.12.1 → hvplot-0.12.2}/doc/tutorials/getting_started_pandas.ipynb +0 -0
  183. {hvplot-0.12.1 → hvplot-0.12.2}/doc/tutorials/index.md +0 -0
  184. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Explorer.ipynb +0 -0
  185. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Geographic_Data.ipynb +0 -0
  186. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Gridded_Data.ipynb +0 -0
  187. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Interactive.ipynb +0 -0
  188. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Introduction.ipynb +0 -0
  189. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Large_Timeseries.ipynb +0 -0
  190. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Plotting.ipynb +0 -0
  191. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Plotting_Extensions.ipynb +0 -0
  192. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Plotting_with_Matplotlib.ipynb +0 -0
  193. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Plotting_with_Plotly.ipynb +0 -0
  194. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Statistical_Plots.ipynb +0 -0
  195. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Streaming.ipynb +0 -0
  196. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Subplots.ipynb +0 -0
  197. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Timeseries_Data.ipynb +0 -0
  198. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Viewing.ipynb +0 -0
  199. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/Widgets.ipynb +0 -0
  200. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/images/simple.svg +0 -0
  201. {hvplot-0.12.1 → hvplot-0.12.2}/doc/user_guide/index.md +0 -0
  202. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/__init__.py +0 -0
  203. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/backend_transforms.py +0 -0
  204. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/cudf.py +0 -0
  205. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/dask.py +0 -0
  206. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/data/crime.csv +0 -0
  207. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/datasets.yaml +0 -0
  208. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/duckdb.py +0 -0
  209. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/fugue.py +0 -0
  210. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/ibis.py +0 -0
  211. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/intake.py +0 -0
  212. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/interactive.py +0 -0
  213. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/networkx.py +0 -0
  214. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/pandas.py +0 -0
  215. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/plotting/__init__.py +0 -0
  216. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/plotting/andrews_curves.py +0 -0
  217. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/plotting/lag_plot.py +0 -0
  218. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/plotting/parallel_coordinates.py +0 -0
  219. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/plotting/scatter_matrix.py +0 -0
  220. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/polars.py +0 -0
  221. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/sample_data.py +0 -0
  222. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/sampledata.py +0 -0
  223. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/streamz.py +0 -0
  224. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/__init__.py +0 -0
  225. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/conftest.py +0 -0
  226. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/data/README.md +0 -0
  227. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/data/RGB-red.byte.tif +0 -0
  228. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/plotting/__init__.py +0 -0
  229. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/plotting/testandrewscurves.py +0 -0
  230. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/plotting/testcore.py +0 -0
  231. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/plotting/testohlc.py +0 -0
  232. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/plotting/testscattermatrix.py +0 -0
  233. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/test_links.py +0 -0
  234. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testbackend_transforms.py +0 -0
  235. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testdeprecations.py +0 -0
  236. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testdocstring.py +0 -0
  237. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testgridplots.py +0 -0
  238. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testhelp.py +0 -0
  239. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testnetworkx.py +0 -0
  240. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testoperations.py +0 -0
  241. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testoptions.py +0 -0
  242. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testoverrides.py +0 -0
  243. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testpanel.py +0 -0
  244. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testpatchsignature.py +0 -0
  245. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/teststatplots.py +0 -0
  246. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/teststreaming.py +0 -0
  247. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/testui.py +0 -0
  248. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/tests/util.py +0 -0
  249. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/ui.py +0 -0
  250. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/utilities.py +0 -0
  251. {hvplot-0.12.1 → hvplot-0.12.2}/hvplot/xarray.py +0 -0
  252. {hvplot-0.12.1 → hvplot-0.12.2}/scripts/conda/build.sh +0 -0
  253. {hvplot-0.12.1 → hvplot-0.12.2}/scripts/conda/recipe/meta.yaml +0 -0
  254. {hvplot-0.12.1 → hvplot-0.12.2}/scripts/download_data.py +0 -0
  255. {hvplot-0.12.1 → hvplot-0.12.2}/scripts/sync_git_tags.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hvplot
3
- Version: 0.12.1
3
+ Version: 0.12.2
4
4
  Summary: A high-level plotting API for the PyData ecosystem built on HoloViews.
5
5
  Project-URL: Homepage, https://hvplot.holoviz.org
6
6
  Project-URL: Source, http://github.com/holoviz/hvplot
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.10
19
19
  Classifier: Programming Language :: Python :: 3.11
20
20
  Classifier: Programming Language :: Python :: 3.12
21
21
  Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
22
23
  Classifier: Topic :: Scientific/Engineering
23
24
  Classifier: Topic :: Software Development :: Libraries
24
25
  Requires-Python: >=3.10
@@ -33,8 +34,8 @@ Requires-Dist: param<3.0,>=1.12.0
33
34
  Provides-Extra: dev-extras
34
35
  Requires-Dist: setuptools-scm>=6; extra == 'dev-extras'
35
36
  Provides-Extra: doc
36
- Requires-Dist: bokeh-sampledata; (python_version >= '3.10') and extra == 'doc'
37
- Requires-Dist: dask[dataframe]<2025.1.0,>=2021.3.0; extra == 'doc'
37
+ Requires-Dist: bokeh-sampledata>=2025.0; extra == 'doc'
38
+ Requires-Dist: dask[dataframe]>=2021.3.0; extra == 'doc'
38
39
  Requires-Dist: datashader>=0.6.5; extra == 'doc'
39
40
  Requires-Dist: duckdb; extra == 'doc'
40
41
  Requires-Dist: fugue-sql-antlr>=0.2.0; extra == 'doc'
@@ -70,8 +71,8 @@ Requires-Dist: streamz>=0.3.0; extra == 'doc'
70
71
  Requires-Dist: xarray>=0.18.2; extra == 'doc'
71
72
  Requires-Dist: xyzservices>=2022.9.0; extra == 'doc'
72
73
  Provides-Extra: examples
73
- Requires-Dist: bokeh-sampledata; (python_version >= '3.10') and extra == 'examples'
74
- Requires-Dist: dask[dataframe]<2025.1.0,>=2021.3.0; extra == 'examples'
74
+ Requires-Dist: bokeh-sampledata>=2025.0; extra == 'examples'
75
+ Requires-Dist: dask[dataframe]>=2021.3.0; extra == 'examples'
75
76
  Requires-Dist: datashader>=0.6.5; extra == 'examples'
76
77
  Requires-Dist: duckdb; extra == 'examples'
77
78
  Requires-Dist: fugue-sql-antlr>=0.2.0; extra == 'examples'
@@ -103,8 +104,8 @@ Requires-Dist: streamz>=0.3.0; extra == 'examples'
103
104
  Requires-Dist: xarray>=0.18.2; extra == 'examples'
104
105
  Requires-Dist: xyzservices>=2022.9.0; extra == 'examples'
105
106
  Provides-Extra: examples-tests
106
- Requires-Dist: bokeh-sampledata; (python_version >= '3.10') and extra == 'examples-tests'
107
- Requires-Dist: dask[dataframe]<2025.1.0,>=2021.3.0; extra == 'examples-tests'
107
+ Requires-Dist: bokeh-sampledata>=2025.0; extra == 'examples-tests'
108
+ Requires-Dist: dask[dataframe]>=2021.3.0; extra == 'examples-tests'
108
109
  Requires-Dist: datashader>=0.6.5; extra == 'examples-tests'
109
110
  Requires-Dist: duckdb; extra == 'examples-tests'
110
111
  Requires-Dist: fugue-sql-antlr>=0.2.0; extra == 'examples-tests'
@@ -163,10 +164,10 @@ Requires-Dist: pyviz-comms>=0.0.1a1; extra == 'hvdev'
163
164
  Provides-Extra: hvdev-geo
164
165
  Requires-Dist: geoviews>=0.0.1a1; extra == 'hvdev-geo'
165
166
  Provides-Extra: tests
166
- Requires-Dist: bokeh-sampledata; (python_version >= '3.10') and extra == 'tests'
167
+ Requires-Dist: bokeh-sampledata; extra == 'tests'
167
168
  Requires-Dist: cftime; extra == 'tests'
168
169
  Requires-Dist: dask; extra == 'tests'
169
- Requires-Dist: dask[dataframe]<2025.1.0; extra == 'tests'
170
+ Requires-Dist: dask[dataframe]; extra == 'tests'
170
171
  Requires-Dist: duckdb; extra == 'tests'
171
172
  Requires-Dist: fugue-sql-antlr>=0.2.0; extra == 'tests'
172
173
  Requires-Dist: fugue[sql]; extra == 'tests'
@@ -190,9 +191,9 @@ Requires-Dist: spatialpandas; extra == 'tests'
190
191
  Requires-Dist: sqlglot; extra == 'tests'
191
192
  Requires-Dist: xarray; extra == 'tests'
192
193
  Provides-Extra: tests-core
193
- Requires-Dist: bokeh-sampledata; (python_version >= '3.10') and extra == 'tests-core'
194
+ Requires-Dist: bokeh-sampledata; extra == 'tests-core'
194
195
  Requires-Dist: cftime; extra == 'tests-core'
195
- Requires-Dist: dask[dataframe]<2025.1.0; extra == 'tests-core'
196
+ Requires-Dist: dask[dataframe]; extra == 'tests-core'
196
197
  Requires-Dist: ipywidgets; extra == 'tests-core'
197
198
  Requires-Dist: matplotlib; extra == 'tests-core'
198
199
  Requires-Dist: numpydoc; extra == 'tests-core'
@@ -280,7 +280,7 @@ autosummary_generate = True
280
280
  # autosummary_generate_overwrite = False
281
281
 
282
282
  intersphinx_mapping = {
283
- 'cartopy': ('https://scitools.org.uk/cartopy/docs/latest/', None),
283
+ 'cartopy': ('https://cartopy.readthedocs.io/stable/', None),
284
284
  'holoviews': ('https://holoviews.org/', None),
285
285
  'pandas': (
286
286
  'https://pandas.pydata.org/pandas-docs/stable/',
@@ -0,0 +1,146 @@
1
+ import os
2
+ import sys
3
+
4
+ from importlib.util import find_spec
5
+
6
+ import dask
7
+
8
+ from packaging.version import Version, parse
9
+ from bokeh.io.webdriver import webdriver_control
10
+ from hvplot.util import _PD_GE_3_0_0
11
+
12
+ # Examples that are slow to run and/or download large files.
13
+ SLOW_EXAMPLES = [
14
+ 'gallery/geospatial/datashade_map.ipynb',
15
+ ]
16
+
17
+ collect_ignore_glob = [
18
+ 'user_guide/Streaming.ipynb',
19
+ ]
20
+
21
+ # Slow examples are excluded by default.
22
+ if os.getenv('HVPLOT_INCLUDE_SLOW_EXAMPLES'):
23
+ collect_ignore_glob.extend(SLOW_EXAMPLES)
24
+
25
+
26
+ if not find_spec('geoviews'): # geo examples
27
+ collect_ignore_glob += [
28
+ 'tutorials/getting_started.ipynb',
29
+ 'gallery/geospatial/*.ipynb',
30
+ 'gallery/gridded/rgb_satellite_imagery.ipynb',
31
+ 'ref/api/manual/hvplot.hvPlot.paths.ipynb',
32
+ 'ref/api/manual/hvplot.hvPlot.points.ipynb',
33
+ 'ref/api/manual/hvplot.hvPlot.polygons.ipynb',
34
+ 'ref/api/manual/hvplot.hvPlot.quadmesh.ipynb',
35
+ 'ref/api/manual/hvplot.hvPlot.rgb.ipynb',
36
+ 'ref/api/manual/hvplot.hvPlot.vectorfield.ipynb',
37
+ 'ref/data_libraries.ipynb',
38
+ 'ref/plotting_options/geographic.ipynb',
39
+ 'user_guide/Explorer.ipynb',
40
+ 'user_guide/Geographic_Data.ipynb',
41
+ 'user_guide/Integrations.ipynb',
42
+ ]
43
+
44
+ if not find_spec('datashader'):
45
+ collect_ignore_glob += [
46
+ 'ref/api/manual/hvplot.plotting.scatter_matrix.ipynb',
47
+ 'ref/plotting_options/resampling.ipynb',
48
+ 'user_guide/Gridded_Data.ipynb',
49
+ 'user_guide/Large_Timeseries.ipynb',
50
+ 'user_guide/Plotting.ipynb',
51
+ 'user_guide/Plotting_with_Matplotlib.ipynb',
52
+ 'user_guide/Plotting_with_Plotly.ipynb',
53
+ ]
54
+
55
+ if not find_spec('streamz') or sys.version_info[:2] >= (3, 14):
56
+ collect_ignore_glob += [
57
+ 'ref/plotting_options/streaming.ipynb',
58
+ ]
59
+
60
+ if _PD_GE_3_0_0:
61
+ # Because of fugue
62
+ collect_ignore_glob += ['ref/data_libraries.ipynb']
63
+
64
+ try:
65
+ import ibis
66
+ import duckdb
67
+
68
+ # 'Ibis <= 10.8.0 is incompatible with DuckDB >= 1.4')
69
+ if parse(ibis.__version__) <= parse('10.8.0') and parse(duckdb.__version__) >= parse('1.4'):
70
+ collect_ignore_glob += ['ref/data_libraries.ipynb']
71
+ except ImportError:
72
+ pass
73
+
74
+ if find_spec('selenium'):
75
+ try:
76
+ webdriver_control.create()
77
+ except RuntimeError:
78
+ # hvplot.save() with bokeh
79
+ collect_ignore_glob += [
80
+ 'user_guide/Viewing.ipynb',
81
+ 'user_guide/NetworkX.ipynb',
82
+ ]
83
+ finally:
84
+ webdriver_control.cleanup()
85
+
86
+ pygraphviz = None
87
+
88
+ try:
89
+ import pygraphviz # noqa
90
+ except ImportError:
91
+ pass
92
+
93
+ pydot = None
94
+ try:
95
+ import pydot # noqa
96
+ except ImportError:
97
+ pass
98
+
99
+ if pygraphviz is None and pydot is None:
100
+ collect_ignore_glob += ['user_guide/NetworkX.ipynb']
101
+
102
+ if Version(dask.__version__).release < (2025, 1, 0):
103
+ # From Dask 2024.3.0 they now use `dask_expr` by default
104
+ # https://github.com/dask/dask/issues/10995
105
+ dask.config.set({'dataframe.query-planning': False})
106
+
107
+
108
+ # https://github.com/pydata/xarray/pull/9182
109
+ try:
110
+ import xarray as xr
111
+ except ImportError:
112
+ pass
113
+ else:
114
+ import numpy as np
115
+
116
+ if Version(np.__version__) >= Version('2.0.0') and Version(xr.__version__) <= Version(
117
+ '2024.6.0'
118
+ ):
119
+ collect_ignore_glob += [
120
+ 'user_guide/Gridded_Data.ipynb',
121
+ ]
122
+
123
+
124
+ def pytest_runtest_makereport(item, call):
125
+ """
126
+ Skip tests that fail because "the kernel died before replying to kernel_info"
127
+ this is a common error when running the example tests in CI.
128
+
129
+ Inspired from: https://stackoverflow.com/questions/32451811
130
+
131
+ """
132
+ from _pytest.runner import pytest_runtest_makereport
133
+
134
+ tr = pytest_runtest_makereport(item, call)
135
+
136
+ if call.excinfo is not None:
137
+ msgs = [
138
+ 'Kernel died before replying to kernel_info',
139
+ "Kernel didn't respond in 60 seconds",
140
+ ]
141
+ for msg in msgs:
142
+ if call.excinfo.type is RuntimeError and call.excinfo.value.args[0] in msg:
143
+ tr.outcome = 'skipped'
144
+ tr.wasxfail = f'reason: {msg}'
145
+
146
+ return tr
@@ -881,7 +881,9 @@
881
881
  "(option-xlim_ylim)=\n",
882
882
  "## `xlim / ylim`\n",
883
883
  "\n",
884
- "The x- and y-axis ranges can be defined with the `xlim` and `ylim` options, respectively. These options accept a 2-tuple representing the minimum and maximum bounds of the plotted ranged. One bound can be left unset by using `None` (e.g. `xlim=(10, None)` means there is no upper bound)."
884
+ "The x- and y-axis ranges can be defined with the `xlim` and `ylim` options, respectively. These options accept a 2-tuple representing the minimum and maximum bounds of the plotted ranged. One bound can be left unset by using `None` (e.g. `xlim=(10, None)` means there is no upper bound).\n",
885
+ "\n",
886
+ "If [`tiles`](option-tiles) is provided and the `xlim` and `ylim` are in `lat`/`lon` coordinates, they will be automatically transformed to Web Mercator coordinates."
885
887
  ]
886
888
  },
887
889
  {
@@ -54,8 +54,8 @@
54
54
  "The `color` option sets the color of the plotted elements. It accepts:\n",
55
55
  "\n",
56
56
  "- A single color name or hex code (e.g., `'red'`, `'#1f77b4'`) to apply uniformly.\n",
57
- "- A list of colors to cycle through when plotting multiple groups (e.g., with `by='column'`).\n",
58
57
  "- A column name to map colors based on data values (for categorical or continuous color encoding).\n",
58
+ "- A list of colors to cycle through when plotting multiple groups (e.g., with `by='column'`).\n",
59
59
  "- A column containing per-point color values (e.g., hex codes).\n",
60
60
  "\n",
61
61
  "If both `color` and `c` are provided, `color` takes precedence. For categorical data, hvPlot automatically uses a discrete colormap unless overridden."
@@ -71,11 +71,6 @@
71
71
  "import hvplot.pandas # noqa\n",
72
72
  "\n",
73
73
  "df = hvplot.sampledata.penguins(\"pandas\")\n",
74
- "df['custom_color'] = df['species'].map({\n",
75
- " 'Adelie': 'red',\n",
76
- " 'Gentoo': 'purple',\n",
77
- " 'Chinstrap': 'grey',\n",
78
- "})\n",
79
74
  "\n",
80
75
  "plot_opts = dict(x=\"flipper_length_mm\", y=\"body_mass_g\", frame_width=250)\n",
81
76
  "(\n",
@@ -83,14 +78,15 @@
83
78
  " color=\"#d133ff\", title=\"Colored by single hex color\", **plot_opts\n",
84
79
  " ) +\n",
85
80
  " df.hvplot.scatter(\n",
86
- " by=\"species\", color=[\"blue\", \"green\", \"orange\"],\n",
87
- " title=\"Groups colored by custom list\", **plot_opts\n",
81
+ " color=\"species\", title=\"Colored by column name\", **plot_opts\n",
88
82
  " ) +\n",
89
83
  " df.hvplot.scatter(\n",
90
- " color=\"species\", title=\"Colored by column name\", **plot_opts\n",
84
+ " by=\"species\", color=[\"blue\", \"green\", \"orange\"],\n",
85
+ " title=\"Groups colored by custom list\", **plot_opts\n",
91
86
  " ) +\n",
92
87
  " df.hvplot.scatter(\n",
93
- " color=\"custom_color\", title=\"Colored by mapped color column\", **plot_opts\n",
88
+ " color=df['species'].map({'Adelie': 'red', 'Gentoo': 'purple', 'Chinstrap': 'grey'}),\n",
89
+ " title=\"Per-point color value\", **plot_opts,\n",
94
90
  " )\n",
95
91
  ").cols(2)"
96
92
  ]
@@ -130,6 +126,35 @@
130
126
  ":::"
131
127
  ]
132
128
  },
129
+ {
130
+ "cell_type": "markdown",
131
+ "id": "be669a46",
132
+ "metadata": {},
133
+ "source": [
134
+ "::: {tip} Categorical Custom Color Mapping: Best Practice\n",
135
+ "\n",
136
+ "When you want to map categorical values to specific colors, use `color='column_name'` with `cmap={...}` instead of passing a pre-mapped Series:\n",
137
+ "\n",
138
+ "**✅ Recommended:**\n",
139
+ "```python\n",
140
+ "df.hvplot.scatter(\n",
141
+ " x='x', y='y', color='species',\n",
142
+ " cmap={'Adelie': 'blue', 'Gentoo': 'yellow', 'Chinstrap': 'red'}\n",
143
+ ")\n",
144
+ "```\n",
145
+ "\n",
146
+ "**❌ Not recommended:**\n",
147
+ "```python\n",
148
+ "df.hvplot.scatter(\n",
149
+ " x='x', y='y',\n",
150
+ " color=df['species'].map({'Adelie': 'blue', ...})\n",
151
+ ")\n",
152
+ "```\n",
153
+ "\n",
154
+ "Using `color='column_name'` with `cmap` keeps your original data visible in hover tooltips and provides a cleaner, more maintainable API.\n",
155
+ ":::"
156
+ ]
157
+ },
133
158
  {
134
159
  "cell_type": "markdown",
135
160
  "id": "7a03fc23-d338-44df-9777-9f06ad1096eb",
@@ -170,25 +195,25 @@
170
195
  "\n",
171
196
  "df = hvplot.sampledata.earthquakes(\"pandas\")\n",
172
197
  "\n",
173
- "plot_opts = dict(x=\"lon\", y=\"lat\", color=\"mag\", frame_width=250)\n",
198
+ "plot_opts = dict(x=\"lon\", y=\"lat\", frame_width=250)\n",
174
199
  "plot1 = df.hvplot.scatter(\n",
175
- " cmap=\"plasma_r\", title=\"Named cmap 'plasma_r'\", **plot_opts\n",
200
+ " cmap=\"plasma_r\", title=\"Named cmap 'plasma_r'\", color=\"mag\", **plot_opts\n",
176
201
  ")\n",
177
202
  "plot2 = df.hvplot.scatter(\n",
178
203
  " cmap=[\n",
179
204
  " '#f7fbff', '#deebf7', '#c6dbef', '#9ecae1',\n",
180
205
  " '#6baed6', '#4292c6', '#2171b5', '#084594',\n",
181
- " ], title=\"Custom list cmap\", **plot_opts\n",
206
+ " ], title=\"Custom list cmap\", color=\"mag\", **plot_opts\n",
182
207
  ")\n",
183
208
  "plot3 = df.hvplot.scatter(\n",
184
- " cmap=mpl.colormaps[\"OrRd\"], title=\"MPL colormap object 'OrRd'\", **plot_opts\n",
209
+ " cmap=mpl.colormaps[\"OrRd\"], title=\"MPL colormap object 'OrRd'\", color=\"mag\", **plot_opts\n",
185
210
  ")\n",
186
211
  "plot4 = df.hvplot.scatter(\n",
187
212
  " cmap={\n",
188
213
  " 'Shallow': 'orange',\n",
189
214
  " 'Intermediate': '#C70039',\n",
190
215
  " 'Deep': '#581845',\n",
191
- " }, title=\"Dict keys categorical cmap\", **{**plot_opts, **{\"color\": \"depth_class\"}},\n",
216
+ " }, title=\"Dict keys categorical cmap\", color=\"depth_class\", **plot_opts,\n",
192
217
  ")\n",
193
218
  "(plot1 + plot2 + plot3 + plot4).cols(2)"
194
219
  ]
@@ -13,6 +13,55 @@
13
13
  "```"
14
14
  ]
15
15
  },
16
+ {
17
+ "cell_type": "markdown",
18
+ "metadata": {},
19
+ "source": [
20
+ "(option-attr_labels)=\n",
21
+ "## `attr_labels`\n",
22
+ "\n",
23
+ "The `attr_labels` option controls whether hvPlot automatically uses xarray object attributes as labels for dimensions in your plots. This feature helps create more descriptive plots by extracting meaningful labels and units from your xarray data's metadata.\n",
24
+ "\n",
25
+ "When set to `True`, hvPlot will look for `long_name` attributes to use as dimension labels and `units` attributes to add unit information. If set to `None` (the default), hvPlot attempts to extract labels without showing warnings if attributes aren't found. Setting it to `False` disables this automatic labeling behavior entirely.\n",
26
+ "\n",
27
+ ":::{note}\n",
28
+ "This option only applies to xarray data objects that contain attributes. It has no effect on pandas DataFrames or other data types.\n",
29
+ ":::"
30
+ ]
31
+ },
32
+ {
33
+ "cell_type": "code",
34
+ "execution_count": null,
35
+ "metadata": {},
36
+ "outputs": [],
37
+ "source": [
38
+ "import hvplot.xarray # noqa\n",
39
+ "\n",
40
+ "ds = hvplot.sampledata.air_temperature(\"xarray\").sel(time='2014-02-25 12:00')\n",
41
+ "print(\"Longitude coordinates:\", ds.coords['lon'].attrs)\n",
42
+ "print(\"Latitude coordinates:\", ds.coords['lat'].attrs)"
43
+ ]
44
+ },
45
+ {
46
+ "cell_type": "code",
47
+ "execution_count": null,
48
+ "metadata": {},
49
+ "outputs": [],
50
+ "source": [
51
+ "plot1 = ds.hvplot.image(\n",
52
+ " title=\"attr_labels=None (default)\",\n",
53
+ " width=350, height=250,\n",
54
+ ")\n",
55
+ "\n",
56
+ "plot2 = ds.hvplot.image(\n",
57
+ " attr_labels=False,\n",
58
+ " title=\"attr_labels=False\",\n",
59
+ " width=350, height=250\n",
60
+ ")\n",
61
+ "\n",
62
+ "plot1 + plot2"
63
+ ]
64
+ },
16
65
  {
17
66
  "cell_type": "markdown",
18
67
  "metadata": {},
@@ -425,6 +425,37 @@
425
425
  "layout.cols(2)"
426
426
  ]
427
427
  },
428
+ {
429
+ "cell_type": "markdown",
430
+ "id": "dcc48e78",
431
+ "metadata": {},
432
+ "source": [
433
+ "If `xlim` and `ylim` are in `lat`/`lon` coordinates, they will be automatically transformed to Web Mercator coordinates."
434
+ ]
435
+ },
436
+ {
437
+ "cell_type": "code",
438
+ "execution_count": null,
439
+ "id": "0f86e368",
440
+ "metadata": {},
441
+ "outputs": [],
442
+ "source": [
443
+ "import holoviews as hv\n",
444
+ "import hvplot.pandas # noqa\n",
445
+ "import xyzservices.providers as xyz\n",
446
+ "\n",
447
+ "df = hvplot.sampledata.earthquakes(\"pandas\")\n",
448
+ "\n",
449
+ "plot_opts = dict(x='lon', y='lat', alpha=0.2, c='brown', frame_width=250, xlim=(-130, -70), ylim=(30, 60))\n",
450
+ "layout = (\n",
451
+ " df.hvplot.points(tiles=True, title=\"Default: OpenStreetMap\", **plot_opts) +\n",
452
+ " df.hvplot.points(tiles=xyz.Esri.WorldPhysical, title=\"xyz.Esri.WorldPhysical\", **plot_opts) +\n",
453
+ " df.hvplot.points(tiles='EsriTerrain', title=\"EsriTerrain string\", **plot_opts) +\n",
454
+ " df.hvplot.points(tiles=hv.element.tiles.EsriImagery, title=\"HoloViews Tiles\", **plot_opts)\n",
455
+ ")\n",
456
+ "layout.cols(2)"
457
+ ]
458
+ },
428
459
  {
429
460
  "cell_type": "markdown",
430
461
  "id": "d0db0527-bb56-4e99-8864-22819b6367c3",
@@ -2,6 +2,41 @@
2
2
 
3
3
  See [the HoloViz blog](https://blog.holoviz.org/#category=hvplot) for a visual summary of the major features added in a selection of releases.
4
4
 
5
+ ## Version 0.12.2 (2025-12-18)
6
+
7
+ The 0.12.2 release is a patch release that brings a few bugfixes and enhancements. Many thanks to @ahuang11, @Azaya89, @hoxbro, @MarcSkovMadsen, @maximlt, and @MridulS for their contributions!
8
+
9
+ Enhancements:
10
+
11
+ - Automatically convert `xlim/ylim` to Web Mercator when `tiles=True` ([#1685](https://github.com/holoviz/hvplot/pull/1685))
12
+ - Automatically use `y` as default `text` kwarg if only two columns ([#1681](https://github.com/holoviz/hvplot/pull/1681))
13
+
14
+ Bug Fixes:
15
+
16
+ - Fix handling of `hv.dim` expressions in `size` and `color` parameters ([#1691](https://github.com/holoviz/hvplot/pull/1691))
17
+ - Exclude internal style columns (`_color` and `_size`) from tooltips ([#1690](https://github.com/holoviz/hvplot/pull/1690))
18
+
19
+ Documentation:
20
+
21
+ - Document `attr_labels` ([#1677](https://github.com/holoviz/hvplot/pull/1677))
22
+ - Fix typo in the NetworkX user guide ([#1686](https://github.com/holoviz/hvplot/pull/1686))
23
+ - Scale networkx layout and fix graphviz init in doc build ([#1672](https://github.com/holoviz/hvplot/pull/1672))
24
+ - Roadmap updates ([#1694](https://github.com/holoviz/hvplot/pull/1694))
25
+
26
+ Compatibility:
27
+
28
+ - Ensure Python 3.14 support ([#1688](https://github.com/holoviz/hvplot/pull/1688), [#1703](https://github.com/holoviz/hvplot/pull/1703))
29
+ - Compatibility with the latest versions of DuckDB ([#1682](https://github.com/holoviz/hvplot/pull/1682))
30
+ - Compatibility with the upcoming Pandas 3.0 ([#1704](https://github.com/holoviz/hvplot/pull/1704))
31
+
32
+ Infrastructure / Tests:
33
+
34
+ - Address warnings emitted by the unit tests suite ([#1700](https://github.com/holoviz/hvplot/pull/1700))
35
+ - Miscellaneous changes ([#1697](https://github.com/holoviz/hvplot/pull/1697), [#1698](https://github.com/holoviz/hvplot/pull/1698), [#1699](https://github.com/holoviz/hvplot/pull/1699), [#1701](https://github.com/holoviz/hvplot/pull/1701), [#1702](https://github.com/holoviz/hvplot/pull/1702), [#1706](https://github.com/holoviz/hvplot/pull/1706), [#1707](https://github.com/holoviz/hvplot/pull/1707))
36
+
37
+ [Full Changelog](https://github.com/holoviz/hvplot/compare/v0.12.1...v0.12.2)
38
+
39
+
5
40
  ## Version 0.12.1 (2025-08-29)
6
41
 
7
42
  The 0.12.1 release is a patch release that brings a few bugfixes and enhancements, and most importantly adds a new extended [Gallery](https://hvplot.holoviz.org/en/docs/latest/gallery/index.html) top-level section with about 50 examples, replacing the previous and limited *Reference Gallery*. Many thanks to @kmnhan (first contribution!), @hoxbro, @Azaya89, and @maximlt for their contributions!
@@ -0,0 +1,70 @@
1
+ # Roadmap
2
+
3
+ hvPlot was released in 2018 and has gained many features since then, becoming a super-charged version of Pandas `.plot()` API, with support for many data structures of the PyData ecosystem (Pandas, Dask, Xarray, GeoPandas, etc.), for multiple plotting backends, and for many powerful features (plotting large datasets with Datashader, geographic data with GeoViews, plotting streaming data, etc.). Despite this, hvPlot isn't currently as widely known as some of the alternatives and has huge room to grow.
4
+
5
+ ## hvPlot development principles
6
+
7
+ The following principles are derived from the goal of improving hvPlot's stability and user-friendliness.
8
+
9
+ 1. Reliability first
10
+
11
+ Prioritize reducing bugs over introducing new features. New features and enhancements are welcome, but only when they do not compromise overall stability. Bugs originating in hvPlot's dependencies, particularly HoloViews, should be easy for users to discover, track, and see resolved through clear GitHub issues and coordinated fixes.
12
+
13
+ 2. Documentation as a core feature
14
+
15
+ Treat documentation as a first-class part of the project. Continuously improve clarity, coverage, and examples, such as by expanding the gallery, until the documentation meets or exceeds the quality of comparable libraries (e.g. Altair, Plotly Express, plotnine). Ensure documentation remains accurate and up to date as the codebase evolves.
16
+
17
+ 3. Strong, accessible testing
18
+
19
+ Maintain a test suite that meaningfully catches regressions and common user errors. Make writing and extending tests straightforward so that contributors can easily add coverage alongside bug fixes and new functionality.
20
+
21
+ 4. User-centered developer experience
22
+
23
+ Improve the day-to-day experience of using hvPlot by adding type hints to support IDE tooling and by providing clearer, more actionable error messages when things go wrong.
24
+
25
+ 5. Deep integration with the PyData ecosystem
26
+
27
+ Actively increase hvPlot’s visibility and adoption across the PyData ecosystem. Engage maintainers of related libraries through issues and discussions to explore deeper integration or exposure of hvPlot, and support those efforts with documentation updates and ongoing collaboration.
28
+
29
+ 6. Thoughtful feature completeness
30
+
31
+ Expose stable, relevant HoloViews capabilities through hvPlot when they add clear user value (e.g. dual axes, native Polars support). Identify and implement essential plotting features expected of a general-purpose plotting library when they are missing (e.g. pie charts), while maintaining hvPlot's simplicity and reliability.
32
+
33
+ Based on these principles, we aim to release 1.0 in early 2026, signaling to hvPlot's user base that it is a stable project already for a few years.
34
+
35
+ ## hvPlot 1.0
36
+
37
+ ### 1. Documentation
38
+
39
+ In 2025, we obtained a Small Development Grant from NumFocus that allowed us to significantly update the documentation, adding a new Reference section with a description of all plotting options and an automated API reference, a new examples gallery, and new tutorials.
40
+
41
+ To complete this documentation update, we now need to convert the user guides into How-To guides, Tutorials, and Explanation pages.
42
+
43
+ ### 2. Refactor the test suite
44
+
45
+ The test suite should be refactored and improved to catch bugs before users have to report them and to prevent potential regressions.
46
+
47
+ ### 3. Add donut and pie charts
48
+
49
+ There are many references in the literature that argue that pie charts do not communicate data precisely enough (humans judge length better than angle, so it’s difficult to compare slices accurately). For this reason, pie charts have not been added to HoloViews, which instead recommends bar charts. Yet pie charts are very commonly used, and not offering this option in hvPlot is a significant gap we aim to fill by adding a Donut plot type in HoloViews and `donut` and `pie` methods to hvPlot.
50
+
51
+ ### 4. Native support for more dataframe libraries like Polars
52
+
53
+ HoloViews added support in version 1.22.0 for Narwhals as a data backend. Narwhals is a library that provides a unified interface to many DataFrame libraries (its API being heavily inspired by Polars). hvPlot already provides good support for various DataFrame libraries, like Pandas and Dask, when these libraries have a data backend implemented in HoloViews. When they do not — as was the case for Polars, for example — hvPlot previously cast the user's DataFrame to a supported type (usually Pandas). With HoloViews' Narwhals backend, hvPlot can now avoid upfront casting and pass DataFrames directly to HoloViews, which can handle them via Narwhals.
54
+
55
+ ## Post hvPlot 1.0
56
+
57
+ ### 1. Figure out the future of the `.interactive` API
58
+
59
+ Param 2.0 introduced a new API for reactive expressions, allowing Param users and users of libraries leveraging this feature (like Panel) to write purely reactive code. Reactive expressions are, in fact, a generalized and improved re-implementation of `.interactive()` from hvPlot.
60
+
61
+ 1. hvPlot should determine whether the `.interactive()` API still has a place in the project.
62
+ 2. If so, its implementation should be updated to use Param's implementation. If not, the feature should be deprecated.
63
+
64
+ ## 2. Improve the Explorer
65
+
66
+ The Explorer is still in development and needs improvements in several areas.
67
+
68
+ 1. The Explorer's design and user experience should draw inspiration from other similar components (e.g. Tableau, Excel, Superset).
69
+ 2. The Explorer should work well with all the data types supported by hvPlot.
70
+ 3. The Explorer should be better integrated into the documentation, both as a tool to explore hvPlot's API and to explore data.
@@ -32,7 +32,7 @@
32
32
  "source": [
33
33
  "In this user guide we will follow along with many of the examples in the [NetworkX tutorial](https://networkx.github.io/documentation/stable/tutorial.html#drawing-graphs) on drawing graphs.\n",
34
34
  "\n",
35
- "The ``hxnx`` namespace provides all the same plotting functions as ``nx``, this means in most cases one can simply be swapped for the other. This also includes most keywords used to customize the plots. The main difference is in the way multiple plots are composited, like all other hvPlot APIs the networkX functions returns HoloViews objects which can be composited using ``+`` and ``*`` operations:"
35
+ "The ``hvnx`` namespace provides all the same plotting functions as ``nx``, this means in most cases one can simply be swapped for the other. This also includes most keywords used to customize the plots. The main difference is in the way multiple plots are composited, like all other hvPlot APIs the networkX functions returns HoloViews objects which can be composited using ``+`` and ``*`` operations:"
36
36
  ]
37
37
  },
38
38
  {
@@ -96,10 +96,11 @@
96
96
  "G = nx.dodecahedral_graph()\n",
97
97
  "\n",
98
98
  "shells = [[2, 3, 4, 5, 6], [8, 1, 0, 19, 18, 17, 16, 15, 14, 7], [9, 10, 11, 12, 13]]\n",
99
- "shell = hvnx.draw_shell(G, nlist=shells)\n",
99
+ "shell_pos = nx.shell_layout(G, nlist=shells, scale=100)\n",
100
+ "shell = hvnx.draw(G, pos=shell_pos)\n",
100
101
  "\n",
101
- "pos = nx.nx_agraph.graphviz_layout(G)\n",
102
- "graphviz = hvnx.draw(G, pos=pos)\n",
102
+ "graphviz_pos = nx.nx_agraph.graphviz_layout(G)\n",
103
+ "graphviz = hvnx.draw(G, pos=graphviz_pos)\n",
103
104
  "\n",
104
105
  "layout = shell + graphviz\n",
105
106
  "layout"
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.12.1'
32
- __version_tuple__ = version_tuple = (0, 12, 1)
31
+ __version__ = version = '0.12.2'
32
+ __version_tuple__ = version_tuple = (0, 12, 2)
33
33
 
34
34
  __commit_id__ = commit_id = None