hvplot 0.11.0a2__tar.gz → 0.11.0a3__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.
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/PKG-INFO +1 -1
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Customization.ipynb +14 -8
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/_version.py +1 -1
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/converter.py +28 -17
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testcharts.py +25 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testoperations.py +12 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testui.py +20 -1
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/ui.py +19 -4
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot.egg-info/PKG-INFO +1 -1
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/.git-blame-ignore-revs +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/.git_archival.txt +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/.gitattributes +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/.github/CONTRIBUTING.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/.github/FUNDING.yml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/.github/workflows/build.yaml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/.github/workflows/docs.yaml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/.github/workflows/test.yaml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/.gitignore +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/.pre-commit-config.yaml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/CHANGELOG.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/CODE_OF_CONDUCT.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/LICENSE +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/README.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/binder/environment.yml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/binder/postBuild +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/conda.recipe/meta.yaml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/custom.css +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/favicon.ico +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/bokeh.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/dask.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/explorer.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/geo.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/geopandas.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/intake.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/interactive_hvplot.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/interactive_pandas.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/interactive_xarray.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/large_data.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/layout.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/matplotlib.png +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/networkx.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/overlay.png +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/pandas.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/plotly.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/widgets.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/home/xarray.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/images/heat_and_trees.png +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/images/portfolio.png +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/logo.png +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/logo_horizontal.svg +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/_static/logo_stacked.svg +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/about.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/assets/console.png +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/assets/console_server.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/assets/diagram.png +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/assets/diagram.svg +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/assets/hvplot-wm.png +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/assets/streamz_demo.gif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/conf.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/conftest.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/developer_guide/index.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/getting_started/explorer.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/getting_started/hvplot.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/getting_started/index.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/getting_started/installation.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/getting_started/interactive.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/governance/project-docs/CONTRIBUTING.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/governance/project-docs/GOVERNANCE.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/governance/project-docs/LICENSE.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/governance/project-docs/MEMBERS.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/index.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/geopandas/points.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/geopandas/polygons.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/andrewscurves.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/area.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/bar.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/barh.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/bivariate.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/box.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/errorbars.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/heatmap.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/hexbin.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/hist.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/kde.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/labels.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/lagplot.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/line.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/ohlc.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/parallelcoordinates.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/paths.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/scatter.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/scattermatrix.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/step.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/table.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/tabular/violin.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/xarray/bar.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/xarray/contour.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/xarray/contourf.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/xarray/hist.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/xarray/image.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/xarray/kde.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/xarray/line.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/xarray/quadmesh.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/xarray/rgb.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/xarray/vectorfield.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/reference/xarray/violin.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/releases.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/roadmap.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/topics.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Explorer.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Geographic_Data.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Gridded_Data.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Integrations.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Interactive.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Introduction.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Large_Timeseries.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/NetworkX.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Pandas_API.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Plotting.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Plotting_Extensions.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Plotting_with_Matplotlib.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Plotting_with_Plotly.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Statistical_Plots.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Streaming.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Subplots.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Timeseries_Data.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Viewing.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/Widgets.ipynb +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/images/simple.svg +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/doc/user_guide/index.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/envs/py3.10-tests.yaml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/envs/py3.11-docs.yaml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/envs/py3.11-tests.yaml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/envs/py3.12-tests.yaml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/envs/py3.9-tests.yaml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/__init__.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/backend_transforms.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/cudf.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/dask.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/data/crime.csv +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/datasets.yaml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/fugue.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/ibis.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/intake.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/interactive.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/networkx.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/pandas.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/plotting/__init__.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/plotting/andrews_curves.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/plotting/core.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/plotting/lag_plot.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/plotting/parallel_coordinates.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/plotting/scatter_matrix.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/polars.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/sample_data.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/streamz.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/__init__.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/conftest.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/data/README.md +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/data/RGB-red.byte.tif +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/plotting/__init__.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/plotting/testcore.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/plotting/testohlc.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/plotting/testscattermatrix.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/test_links.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testbackend_transforms.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testfugue.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testgeo.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testgeowithoutgv.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testgridplots.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testhelp.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testibis.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testinteractive.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testnetworkx.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testoptions.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testoverrides.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testpanel.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testpatch.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testplotting.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/teststatplots.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/teststreaming.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testtransforms.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/testutil.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/tests/util.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/util.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/utilities.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot/xarray.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot.egg-info/SOURCES.txt +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot.egg-info/dependency_links.txt +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot.egg-info/entry_points.txt +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot.egg-info/requires.txt +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/hvplot.egg-info/top_level.txt +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/pyproject.toml +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/scripts/update_conda_envs.py +0 -0
- {hvplot-0.11.0a2 → hvplot-0.11.0a3}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: hvplot
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.0a3
|
|
4
4
|
Summary: A high-level plotting API for the PyData ecosystem built on HoloViews.
|
|
5
5
|
Author-email: Philipp Rudiger <developers@holoviz.org>
|
|
6
6
|
Maintainer-email: HoloViz developers <developers@holoviz.org>
|
|
@@ -60,22 +60,20 @@
|
|
|
60
60
|
" Whether to flip the axis left to right or up and down respectively\n",
|
|
61
61
|
" grid (default=False): boolean\n",
|
|
62
62
|
" Whether to show a grid\n",
|
|
63
|
-
" hover
|
|
63
|
+
" hover: boolean or Literal[\"vline\", \"hline\"]\n",
|
|
64
64
|
" Whether to show hover tooltips, default is True unless datashade is\n",
|
|
65
|
-
" True in which case hover is False by default\n",
|
|
65
|
+
" True in which case hover is False by default. Can also set\n",
|
|
66
|
+
" `vline` for hitbox across a vertical line or `hline` for hitbox across a horizontal line.\n",
|
|
66
67
|
" hover_cols (default=[]): list or str\n",
|
|
67
68
|
" Additional columns to add to the hover tool or 'all' which will\n",
|
|
68
69
|
" includes all columns (including indexes if use_index is True).\n",
|
|
70
|
+
" hover_formatters:\n",
|
|
71
|
+
" A dict of formatting options for the hover tooltip.\n",
|
|
69
72
|
" hover_tooltips list[str] or list[tuple]:\n",
|
|
70
73
|
" A list of dimensions to be displayed in the hover tooltip. See\n",
|
|
71
74
|
" [HoloViews docs](https://holoviews.org/user_guide/Plotting_with_Bokeh.html#hover-tools)\n",
|
|
72
75
|
" or [Bokeh docs](https://docs.bokeh.org/en/latest/docs/user_guide/interaction/tools.html#hovertool)\n",
|
|
73
76
|
" for more info on structuring.\n",
|
|
74
|
-
" hover_formatters:\n",
|
|
75
|
-
" A dict of formatting options for the hover tooltip.\n",
|
|
76
|
-
" hover_mode (default='mouse'):\n",
|
|
77
|
-
" The hover mode determines how the hover tool is activated;\n",
|
|
78
|
-
" select from 'mouse', 'vline', or 'hline'.\n",
|
|
79
77
|
" invert (default=False): boolean\n",
|
|
80
78
|
" Swaps x- and y-axis\n",
|
|
81
79
|
" frame_width/frame_height: int\n",
|
|
@@ -202,6 +200,13 @@
|
|
|
202
200
|
" dynspread (default=False):\n",
|
|
203
201
|
" Allows plots generated with datashade=True to increase the point\n",
|
|
204
202
|
" size to make sparse regions more visible\n",
|
|
203
|
+
" pixel_ratio (default=None):\n",
|
|
204
|
+
" Pixel ratio applied to the height and width, used when rasterizing or\n",
|
|
205
|
+
" datashading. When not set explicitly, the ratio is automatically\n",
|
|
206
|
+
" obtained from the browser device pixel ratio. Default is 1 when\n",
|
|
207
|
+
" the browser information is not available. Useful when the browser\n",
|
|
208
|
+
" information is not available (pixel_ratio=2 can give better results on\n",
|
|
209
|
+
" Retina displays) or for using lower resolution for speed.\n",
|
|
205
210
|
" rasterize (default=False):\n",
|
|
206
211
|
" Whether to apply rasterization using the datashader library\n",
|
|
207
212
|
" returning an aggregated Image\n",
|
|
@@ -210,7 +215,8 @@
|
|
|
210
215
|
" the number of individual data points present in the current zoom range\n",
|
|
211
216
|
" is above this threshold. The raw plot is displayed otherwise.\n",
|
|
212
217
|
" x_sampling/y_sampling (default=None):\n",
|
|
213
|
-
" Specifies the smallest allowed sampling interval along the x/y axis
|
|
218
|
+
" Specifies the smallest allowed sampling interval along the x/y axis.\n",
|
|
219
|
+
" Used when rasterizing or datashading."
|
|
214
220
|
]
|
|
215
221
|
},
|
|
216
222
|
{
|
|
@@ -148,12 +148,10 @@ class HoloViewsConverter:
|
|
|
148
148
|
hover_cols (default=[]): list or str
|
|
149
149
|
Additional columns to add to the hover tool or 'all' which will
|
|
150
150
|
includes all columns (including indexes if use_index is True).
|
|
151
|
-
hover_tooltips list[str] or list[tuple]:
|
|
152
|
-
A list of dimensions to be displayed in the hover tooltip.
|
|
153
151
|
hover_formatters:
|
|
154
152
|
A dict of formatting options for the hover tooltip.
|
|
155
|
-
|
|
156
|
-
|
|
153
|
+
hover_tooltips list[str] or list[tuple]:
|
|
154
|
+
A list of dimensions to be displayed in the hover tooltip.
|
|
157
155
|
invert (default=False): boolean
|
|
158
156
|
Swaps x- and y-axis
|
|
159
157
|
frame_width/frame_height: int
|
|
@@ -282,6 +280,13 @@ class HoloViewsConverter:
|
|
|
282
280
|
For plots generated with datashade=True or rasterize=True,
|
|
283
281
|
automatically increase the point size when the data is sparse
|
|
284
282
|
so that individual points become more visible
|
|
283
|
+
pixel_ratio (default=None):
|
|
284
|
+
Pixel ratio applied to the height and width, used when rasterizing or
|
|
285
|
+
datashading. When not set explicitly, the ratio is automatically
|
|
286
|
+
obtained from the browser device pixel ratio. Default is 1 when
|
|
287
|
+
the browser information is not available. Useful when the browser
|
|
288
|
+
information is not available (pixel_ratio=2 can give better results on
|
|
289
|
+
Retina displays) or for using lower resolution for speed.
|
|
285
290
|
rasterize (default=False):
|
|
286
291
|
Whether to apply rasterization using the Datashader library,
|
|
287
292
|
returning an aggregated Image (to be colormapped by the
|
|
@@ -292,6 +297,7 @@ class HoloViewsConverter:
|
|
|
292
297
|
is above this threshold. The raw plot is displayed otherwise.
|
|
293
298
|
x_sampling/y_sampling (default=None):
|
|
294
299
|
Specifies the smallest allowed sampling interval along the x/y axis.
|
|
300
|
+
Used when rasterizing or datashading.
|
|
295
301
|
|
|
296
302
|
Geographic options
|
|
297
303
|
------------------
|
|
@@ -428,6 +434,7 @@ class HoloViewsConverter:
|
|
|
428
434
|
_op_options = [
|
|
429
435
|
'datashade',
|
|
430
436
|
'rasterize',
|
|
437
|
+
'pixel_ratio',
|
|
431
438
|
'x_sampling',
|
|
432
439
|
'y_sampling',
|
|
433
440
|
'downsample',
|
|
@@ -562,9 +569,9 @@ class HoloViewsConverter:
|
|
|
562
569
|
logy=None,
|
|
563
570
|
loglog=None,
|
|
564
571
|
hover=None,
|
|
565
|
-
|
|
572
|
+
hover_cols=[],
|
|
566
573
|
hover_formatters=None,
|
|
567
|
-
|
|
574
|
+
hover_tooltips=None,
|
|
568
575
|
subplots=False,
|
|
569
576
|
label=None,
|
|
570
577
|
invert=False,
|
|
@@ -587,9 +594,9 @@ class HoloViewsConverter:
|
|
|
587
594
|
flip_xaxis=None,
|
|
588
595
|
flip_yaxis=None,
|
|
589
596
|
dynspread=False,
|
|
590
|
-
hover_cols=[],
|
|
591
597
|
x_sampling=None,
|
|
592
598
|
y_sampling=None,
|
|
599
|
+
pixel_ratio=None,
|
|
593
600
|
project=False,
|
|
594
601
|
tools=[],
|
|
595
602
|
attr_labels=None,
|
|
@@ -706,6 +713,7 @@ class HoloViewsConverter:
|
|
|
706
713
|
self.precompute = precompute
|
|
707
714
|
self.x_sampling = x_sampling
|
|
708
715
|
self.y_sampling = y_sampling
|
|
716
|
+
self.pixel_ratio = pixel_ratio
|
|
709
717
|
|
|
710
718
|
# By type
|
|
711
719
|
self.subplots = subplots
|
|
@@ -837,17 +845,15 @@ class HoloViewsConverter:
|
|
|
837
845
|
if hover and not any(
|
|
838
846
|
t for t in tools if isinstance(t, HoverTool) or t in ['hover', 'vline', 'hline']
|
|
839
847
|
):
|
|
840
|
-
if hover in
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
848
|
+
if hover in {'vline', 'hline'}:
|
|
849
|
+
plot_opts['hover_mode'] = hover
|
|
850
|
+
tools.append('hover')
|
|
851
|
+
if 'hover' in tools:
|
|
852
|
+
if hover_tooltips:
|
|
853
|
+
plot_opts['hover_tooltips'] = hover_tooltips
|
|
854
|
+
if hover_formatters:
|
|
855
|
+
plot_opts['hover_formatters'] = hover_formatters
|
|
844
856
|
plot_opts['tools'] = tools
|
|
845
|
-
if hover_tooltips:
|
|
846
|
-
plot_opts['hover_tooltips'] = hover_tooltips
|
|
847
|
-
if hover_formatters:
|
|
848
|
-
plot_opts['hover_formatters'] = hover_formatters
|
|
849
|
-
if hover_mode:
|
|
850
|
-
plot_opts['hover_mode'] = hover_mode
|
|
851
857
|
|
|
852
858
|
if self.crs and global_extent:
|
|
853
859
|
plot_opts['global_extent'] = global_extent
|
|
@@ -1779,6 +1785,7 @@ class HoloViewsConverter:
|
|
|
1779
1785
|
opts['line_width'] = self._style_opts['line_width']
|
|
1780
1786
|
|
|
1781
1787
|
style = {}
|
|
1788
|
+
|
|
1782
1789
|
if self.datashade:
|
|
1783
1790
|
operation = datashade
|
|
1784
1791
|
if 'cmap' in opts and 'color_key' not in opts:
|
|
@@ -1788,6 +1795,8 @@ class HoloViewsConverter:
|
|
|
1788
1795
|
opts['cnorm'] = self._plot_opts['cnorm']
|
|
1789
1796
|
if 'rescale_discrete_levels' in self._plot_opts:
|
|
1790
1797
|
opts['rescale_discrete_levels'] = self._plot_opts['rescale_discrete_levels']
|
|
1798
|
+
if self.pixel_ratio:
|
|
1799
|
+
opts['pixel_ratio'] = self.pixel_ratio
|
|
1791
1800
|
elif self.rasterize:
|
|
1792
1801
|
operation = rasterize
|
|
1793
1802
|
eltype = 'ImageStack' if categorical else 'Image'
|
|
@@ -1795,6 +1804,8 @@ class HoloViewsConverter:
|
|
|
1795
1804
|
style['cmap'] = self._style_opts['cmap']
|
|
1796
1805
|
if self._dim_ranges.get('c', (None, None)) != (None, None):
|
|
1797
1806
|
style['clim'] = self._dim_ranges['c']
|
|
1807
|
+
if self.pixel_ratio:
|
|
1808
|
+
opts['pixel_ratio'] = self.pixel_ratio
|
|
1798
1809
|
|
|
1799
1810
|
processed = self._resample_obj(operation, obj, opts)
|
|
1800
1811
|
if self.dynspread:
|
|
@@ -469,6 +469,31 @@ class TestChart1D(ComparisonTestCase):
|
|
|
469
469
|
bkplot = Store.renderers['bokeh'].get_plot(plot)
|
|
470
470
|
assert not bkplot.tools
|
|
471
471
|
|
|
472
|
+
@parameterized.expand(['vline', 'hline'])
|
|
473
|
+
def test_hover_line(self, hover_mode):
|
|
474
|
+
plot = self.df.hvplot('x', 'y', hover=hover_mode)
|
|
475
|
+
opts = Store.lookup_options('bokeh', plot, 'plot')
|
|
476
|
+
self.assertEqual(opts.kwargs['hover_mode'], hover_mode)
|
|
477
|
+
|
|
478
|
+
def test_hover_tooltips(self):
|
|
479
|
+
plot = self.df.hvplot('x', 'y', hover_tooltips=['x'])
|
|
480
|
+
opts = Store.lookup_options('bokeh', plot, 'plot')
|
|
481
|
+
self.assertEqual(opts.kwargs['hover_tooltips'], ['x'])
|
|
482
|
+
|
|
483
|
+
def test_hover_formatter(self):
|
|
484
|
+
plot = self.df.hvplot('x', 'y', hover_formatters={'x': 'datetime'})
|
|
485
|
+
opts = Store.lookup_options('bokeh', plot, 'plot')
|
|
486
|
+
self.assertEqual(opts.kwargs['hover_formatters'], {'x': 'datetime'})
|
|
487
|
+
|
|
488
|
+
def test_hover_disabled(self):
|
|
489
|
+
plot = self.df.hvplot(
|
|
490
|
+
'x', 'y', hover_tooltips=['x'], hover_formatters={'x': 'datetime'}, hover=False
|
|
491
|
+
)
|
|
492
|
+
opts = Store.lookup_options('bokeh', plot, 'plot')
|
|
493
|
+
self.assertEqual(opts.kwargs['tools'], [])
|
|
494
|
+
assert 'hover_formatters' not in opts.kwargs
|
|
495
|
+
assert 'hover_tooltips' not in opts.kwargs
|
|
496
|
+
|
|
472
497
|
def test_labels_format(self):
|
|
473
498
|
plot = self.df.hvplot('x', 'y', text='({x}, {y})', kind='labels')
|
|
474
499
|
assert list(plot.dimensions()) == [Dimension('x'), Dimension('y'), Dimension('label')]
|
|
@@ -223,6 +223,18 @@ class TestDatashader(ComparisonTestCase):
|
|
|
223
223
|
actual = plot.callback.inputs[0].callback.operation.p['cnorm']
|
|
224
224
|
assert actual == expected
|
|
225
225
|
|
|
226
|
+
def test_rasterize_pixel_ratio(self):
|
|
227
|
+
expected = 0.5
|
|
228
|
+
plot = self.df.hvplot(x='x', y='y', rasterize=True, pixel_ratio=expected)
|
|
229
|
+
actual = plot.callback.inputs[0].callback.operation.p['pixel_ratio']
|
|
230
|
+
assert actual == expected
|
|
231
|
+
|
|
232
|
+
def test_datashade_pixel_ratio(self):
|
|
233
|
+
expected = 0.5
|
|
234
|
+
plot = self.df.hvplot(x='x', y='y', datashade=True, pixel_ratio=expected)
|
|
235
|
+
actual = plot.callback.inputs[0].callback.operation.p['pixel_ratio']
|
|
236
|
+
assert actual == expected
|
|
237
|
+
|
|
226
238
|
def test_rasterize_rescale_discrete_levels(self):
|
|
227
239
|
expected = False
|
|
228
240
|
plot = self.df.hvplot(
|
|
@@ -11,7 +11,7 @@ import xarray as xr
|
|
|
11
11
|
import pytest
|
|
12
12
|
|
|
13
13
|
from bokeh.sampledata import penguins
|
|
14
|
-
from hvplot.ui import hvDataFrameExplorer, hvGridExplorer
|
|
14
|
+
from hvplot.ui import hvDataFrameExplorer, hvGridExplorer, MAX_ROWS
|
|
15
15
|
|
|
16
16
|
df = penguins.data
|
|
17
17
|
ds_air_temperature = xr.tutorial.open_dataset('air_temperature')
|
|
@@ -395,3 +395,22 @@ def test_explorer_geo_revise_kind(kind_tuple):
|
|
|
395
395
|
da = ds_air_temperature['air'].isel(time=0)
|
|
396
396
|
explorer = hvplot.explorer(da, x='lon', y='lat', kind=kind_tuple[0], geo=True)
|
|
397
397
|
assert explorer.kind == kind_tuple[1]
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
def test_max_rows_curve():
|
|
401
|
+
N = 100001
|
|
402
|
+
x = np.linspace(0.0, 6.4, num=N)
|
|
403
|
+
y = np.sin(x) + 10
|
|
404
|
+
df = pd.DataFrame({'x': x, 'y': y})
|
|
405
|
+
ui = hvplot.explorer(df, x='x', y='y', by=['#'], kind='line')
|
|
406
|
+
assert ui._data.equals(df.head(MAX_ROWS))
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
def test_max_rows_sample():
|
|
410
|
+
N = 100001
|
|
411
|
+
x = np.linspace(0.0, 6.4, num=N)
|
|
412
|
+
y = np.sin(x) + 10
|
|
413
|
+
df = pd.DataFrame({'x': x, 'y': y})
|
|
414
|
+
ui = hvplot.explorer(df, x='x', y='y', by=['#'], kind='scatter')
|
|
415
|
+
assert len(ui._data) == MAX_ROWS
|
|
416
|
+
assert not ui._data.equals(df.head(MAX_ROWS))
|
|
@@ -48,7 +48,7 @@ GEO_KEYS = [
|
|
|
48
48
|
'feature_scale',
|
|
49
49
|
]
|
|
50
50
|
AGGREGATORS = [None, 'count', 'min', 'max', 'mean', 'sum', 'any']
|
|
51
|
-
MAX_ROWS =
|
|
51
|
+
MAX_ROWS = 100000
|
|
52
52
|
CONTROLS_WIDTH = 200
|
|
53
53
|
|
|
54
54
|
|
|
@@ -685,13 +685,27 @@ class hvPlotExplorer(Viewer):
|
|
|
685
685
|
|
|
686
686
|
kwargs['min_height'] = 400
|
|
687
687
|
df = self._data
|
|
688
|
+
show_alert = False
|
|
688
689
|
if len(df) > MAX_ROWS and not (
|
|
689
690
|
self.kind in KINDS['stats'] or kwargs.get('rasterize') or kwargs.get('datashade')
|
|
690
691
|
):
|
|
691
|
-
|
|
692
|
+
warn_message = (
|
|
693
|
+
f'plotted {MAX_ROWS} rows out of {len(df)} rows '
|
|
694
|
+
f'to avoid performance issues; use rasterize=True or datashade=True to visualize more.'
|
|
695
|
+
)
|
|
696
|
+
if self.kind == 'line':
|
|
697
|
+
warn_message = f'Selected the first {MAX_ROWS} rows and {warn_message}'
|
|
698
|
+
df = df.head(MAX_ROWS)
|
|
699
|
+
else:
|
|
700
|
+
warn_message = f'Randomly sampled and {warn_message}'
|
|
701
|
+
df = df.sample(n=MAX_ROWS)
|
|
702
|
+
self._alert.param.update(object=warn_message, visible=True)
|
|
703
|
+
param.main.param.warning(warn_message)
|
|
704
|
+
show_alert = True
|
|
705
|
+
self._data = df
|
|
692
706
|
self._layout.loading = True
|
|
693
707
|
try:
|
|
694
|
-
self._hvplot = _hvPlot(
|
|
708
|
+
self._hvplot = _hvPlot(self._data)(
|
|
695
709
|
kind=self.kind, x=self.x, y=y, by=self.by, groupby=self.groupby, **kwargs
|
|
696
710
|
)
|
|
697
711
|
if opts_kwargs:
|
|
@@ -703,7 +717,8 @@ class hvPlotExplorer(Viewer):
|
|
|
703
717
|
if len(self._hv_pane.widget_box) > 1:
|
|
704
718
|
for w in self._hv_pane.widget_box:
|
|
705
719
|
w.margin = (20, 5, 5, 5)
|
|
706
|
-
|
|
720
|
+
if not show_alert:
|
|
721
|
+
self._alert.visible = False
|
|
707
722
|
except Exception as e:
|
|
708
723
|
self._alert.param.update(
|
|
709
724
|
object=f'**Rendering failed with following error**: {e}', visible=True
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: hvplot
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.0a3
|
|
4
4
|
Summary: A high-level plotting API for the PyData ecosystem built on HoloViews.
|
|
5
5
|
Author-email: Philipp Rudiger <developers@holoviz.org>
|
|
6
6
|
Maintainer-email: HoloViz developers <developers@holoviz.org>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|