holoviz / hvplot

A high-level plotting API for pandas, dask, xarray, and networkx built on HoloViews
https://hvplot.holoviz.org
BSD 3-Clause "New" or "Revised" License
1.13k stars 108 forks source link

Support Plotly Backend #480

Closed malekop closed 2 years ago

malekop commented 4 years ago

I have just moved to a new device and as such have setup a new conda environment with all of the latest libraries installed.

Apologies as I am not sure if this is hvplot or holoviews specific - it appears to affect both.

Since setting up my new conda environment, for the following code, if I use the Bokeh backend then it plots no issue:

hv.extension("bokeh")

# CREATE AN EMPTY DICTIONARY TO HOLD A BOX PLOT FOR EVERY NUMERIC ATTRIBUTE OF THE df DATAFRAME
box_plots = {}

for indx,att in enumerate(atts):
    box_plots[("box_plot"+str(indx))] = df.hvplot.box(y=att,color="purple",
                                                      legend=False,
                                                      width=300,height=300)

result3 = hv.Layout([box_plots[plot] for plot in box_plots]).cols(2)
result3

Screenshot 2020-06-04 at 19 00 35 Screenshot 2020-06-04 at 19 00 47 Screenshot 2020-06-04 at 19 00 56 Screenshot 2020-06-04 at 19 01 07 Screenshot 2020-06-04 at 19 01 15 Screenshot 2020-06-04 at 19 01 25 Screenshot 2020-06-04 at 19 01 33 Screenshot 2020-06-04 at 19 01 41

N.B. The "atts" used above are:

['mean radius',
 'mean texture',
 'mean perimeter',
 'mean area',
 'mean smoothness',
 'mean compactness',
 'mean concavity',
 'mean concave points',
 'mean symmetry',
 'mean fractal dimension',
 'radius error',
 'texture error',
 'perimeter error',
 'area error',
 'smoothness error',
 'compactness error',
 'concavity error',
 'concave points error',
 'symmetry error',
 'fractal dimension error',
 'worst radius',
 'worst texture',
 'worst perimeter',
 'worst area',
 'worst smoothness',
 'worst compactness',
 'worst concavity',
 'worst concave points',
 'worst symmetry',
 'worst fractal dimension',
 'target']

However, if I use the Plotly backend then I get a bunch of warnings and no output:

hv.extension("plotly")

# CREATE AN EMPTY DICTIONARY TO HOLD A BOX PLOT FOR EVERY NUMERIC ATTRIBUTE OF THE df DATAFRAME
box_plots = {}

for indx,att in enumerate(atts):
    box_plots[("box_plot"+str(indx))] = df.hvplot.box(y=att,color="purple",
                                                      legend=False,
                                                      width=300,height=300)

result3 = hv.Layout([box_plots[plot] for plot in box_plots]).cols(2)
result3

Screenshot 2020-06-04 at 19 08 11 Screenshot 2020-06-04 at 19 08 33 Screenshot 2020-06-04 at 19 09 00 Screenshot 2020-06-04 at 19 09 18 Screenshot 2020-06-04 at 19 09 36 Screenshot 2020-06-04 at 19 10 05 Screenshot 2020-06-04 at 19 10 22 Screenshot 2020-06-04 at 19 12 34

I need my boxplots to be interactive so I need to use the Plotly backend.

Thanks


Output of conda_list command:

# Name                    Version                   Build  Channel
_anaconda_depends         2020.02                  py37_0  
alabaster                 0.7.12                   py37_0  
anaconda                  custom                   py37_1  
anaconda-client           1.7.2                    py37_0  
anaconda-project          0.8.4                      py_0  
applaunchservices         0.2.1                      py_0  
appnope                   0.1.0                    py37_0  
appscript                 1.1.0            py37h1de35cc_0  
argh                      0.26.2                   py37_0  
arrow-cpp                 0.15.1           py37hb41def8_6  
asn1crypto                1.3.0                    py37_0  
astroid                   2.4.1                    py37_0  
astropy                   4.0.1.post1      py37h01d97ff_1  
atomicwrites              1.4.0                      py_0  
attrs                     19.3.0                     py_0  
autopep8                  1.4.4                      py_0  
babel                     2.8.0                      py_0  
backcall                  0.1.0                    py37_0  
backports                 1.0                        py_2  
backports.shutil_get_terminal_size 1.0.0                    py37_2  
beautifulsoup4            4.9.0                    py37_0  
bitarray                  1.2.1            py37h1de35cc_0  
bkcharts                  0.2                      py37_0  
blas                      1.0                         mkl  
bleach                    3.1.4                      py_0  
blosc                     1.16.3               hd9629dc_0  
bokeh                     2.0.2                    py37_0  
boost-cpp                 1.69.0            h6f8c590_1000    conda-forge
boto                      2.49.0                   py37_0  
bottleneck                1.3.2            py37h776bbcc_0  
brotli                    1.0.7             h4a8c4bd_1002    conda-forge
bzip2                     1.0.8                h1de35cc_0  
c-ares                    1.15.0            h01d97ff_1001    conda-forge
ca-certificates           2020.4.5.1           hecc5488_0    conda-forge
cairo                     1.14.12              hc4e6be7_4  
cartopy                   0.17.0           py37haea56ea_1  
certifi                   2020.4.5.1       py37hc8dfbb8_0    conda-forge
cffi                      1.14.0           py37hb5b8e2f_0  
cftime                    1.1.2            py37h776bbcc_0  
chardet                   3.0.4                 py37_1003  
click                     7.1.2                      py_0  
click-plugins             1.1.1                      py_0  
cligj                     0.5.0                    py37_0  
cloudpickle               1.4.1                      py_0  
clyent                    1.2.2                    py37_1  
colorama                  0.4.3                      py_0  
colorcet                  2.0.2                      py_0    pyviz
contextlib2               0.6.0.post1                py_0  
cryptography              2.9.2            py37ha12b0ac_0  
curl                      7.67.0               ha441bb4_0  
cycler                    0.10.0                   py37_0  
cython                    0.29.17          py37h0a44026_0  
cytoolz                   0.10.1           py37h1de35cc_0  
dask                      2.17.2                     py_0  
dask-core                 2.17.2                     py_0  
datashader                0.10.0                     py_0    pyviz
datashape                 0.5.4                    py37_1  
dbus                      1.13.14              h517e14e_0  
decorator                 4.4.2                      py_0  
defusedxml                0.6.0                      py_0  
diff-match-patch          20181111                   py_0  
distributed               2.17.0                   py37_0  
docutils                  0.16                     py37_0  
double-conversion         3.1.5                h4a8c4bd_2    conda-forge
entrypoints               0.3                      py37_0  
et_xmlfile                1.0.1                    py37_0  
expat                     2.2.6                h0a44026_0  
fastcache                 1.1.0            py37h1de35cc_0  
feather-format            0.4.1              pyh9f0ad1d_0    conda-forge
filelock                  3.0.12                     py_0  
fiona                     1.8.4            py37h9a122fd_0  
flake8                    3.7.9                    py37_0  
flask                     1.1.2                      py_0  
fontconfig                2.13.0               h5d5b041_1  
freetype                  2.9.1                hb4e5f40_0  
freexl                    1.0.5                h1de35cc_0  
fsspec                    0.7.4                      py_0  
future                    0.18.2                   py37_0  
gdal                      2.3.3            py37hbe65578_0  
geckodriver               0.26.0               h4a8c4bd_0    conda-forge
geopandas                 0.6.1                      py_0  
geos                      3.7.1                h0a44026_0  
geoviews                  1.8.1                      py_0    pyviz
geoviews-core             1.8.1                      py_0    pyviz
get_terminal_size         1.0.0                h7520d66_0  
gettext                   0.19.8.1             h15daf44_3  
gevent                    1.4.0            py37h1de35cc_0  
gflags                    2.2.2             h4a8c4bd_1002    conda-forge
giflib                    5.1.4                h1de35cc_1  
glib                      2.63.1               hd977a24_0  
glob2                     0.7                        py_0  
glog                      0.4.0                h700f914_3    conda-forge
gmp                       6.1.2                hb37e062_1  
gmpy2                     2.0.8            py37h6ef4df4_2  
greenlet                  0.4.15           py37h1de35cc_0  
grpc-cpp                  1.26.0               h044775b_0  
h5py                      2.10.0           py37h3134771_0  
hdf4                      4.2.13               h39711bb_2  
hdf5                      1.10.4               hfa1e0ec_0  
heapdict                  1.0.1                      py_0  
holoviews                 1.13.2                     py_0    pyviz
html5lib                  1.0.1                    py37_0  
hvplot                    0.6.0                      py_0    pyviz
hypothesis                5.11.0                     py_0  
icu                       58.2                 h0a44026_3  
idna                      2.9                        py_1  
imageio                   2.8.0                      py_0  
imagesize                 1.2.0                      py_0  
importlib-metadata        1.6.0                    py37_0  
importlib_metadata        1.6.0                         0  
intel-openmp              2019.4                      233  
intervaltree              3.0.2                      py_0  
ipykernel                 5.1.4            py37h39e3cac_0  
ipython                   7.13.0           py37h5ca1d4c_0  
ipython_genutils          0.2.0                    py37_0  
ipywidgets                7.5.1                      py_0  
isort                     4.3.21                   py37_0  
itsdangerous              1.1.0                    py37_0  
jbig                      2.1                  h4d881f8_0  
jdcal                     1.4.1                      py_0  
jedi                      0.15.2                   py37_0  
jinja2                    2.11.2                     py_0  
joblib                    0.15.1                     py_0  
jpeg                      9b                   he5867d9_2  
json-c                    0.13.1               h3efe00b_0  
json5                     0.9.4                      py_0  
jsonschema                3.2.0                    py37_0  
jupyter                   1.0.0                    py37_7  
jupyter_client            6.1.3                      py_0  
jupyter_console           6.1.0                      py_0  
jupyter_core              4.6.3                    py37_0  
jupyterlab                1.2.6              pyhf63ae98_0  
jupyterlab_server         1.1.4                      py_0  
kealib                    1.4.7                hf5ed860_6  
keyring                   21.1.1                   py37_2  
kiwisolver                1.2.0            py37h04f5b5a_0  
krb5                      1.16.4               hddcf347_0  
lazy-object-proxy         1.4.3            py37h1de35cc_0  
libarchive                3.3.3                h786848e_5  
libboost                  1.67.0               hebc422b_4  
libcurl                   7.67.0               h051b688_0  
libcxx                    10.0.0                        1  
libcxxabi                 4.0.1                hcfea43d_1  
libdap4                   3.19.1               h3d3e54a_0  
libedit                   3.1.20181209         hb402a30_0  
libevent                  2.1.10               hafa8578_0    conda-forge
libffi                    3.2.1                h0a44026_6  
libgdal                   2.3.3                h0950a36_0  
libgfortran               3.0.1                h93005f0_2  
libiconv                  1.16                 h1de35cc_0  
libkml                    1.3.0                hbe12b63_4  
liblief                   0.10.1               h0a44026_0  
libnetcdf                 4.6.1                hd5207e6_2  
libpng                    1.6.37               ha441bb4_0  
libpq                     11.2                 h051b688_0  
libprotobuf               3.11.2               hd9629dc_0  
libsodium                 1.0.16               h3efe00b_0  
libspatialindex           1.9.3                h0a44026_0  
libspatialite             4.3.0a              h644ec7d_19  
libssh2                   1.9.0                ha12b0ac_1  
libtiff                   4.1.0                hcb84e12_0  
libxml2                   2.9.9                hf6e021a_1  
libxslt                   1.1.33               h33a18ac_0  
llvm-openmp               10.0.0               h28b9765_0  
llvmlite                  0.32.1           py37h8c7ce04_0  
locket                    0.2.0                    py37_1  
lxml                      4.5.0            py37hef8c89e_0  
lz4-c                     1.8.1.2              h1de35cc_0  
lzo                       2.10                 h1de35cc_2  
markdown                  3.1.1                    py37_0  
markupsafe                1.1.1            py37h1de35cc_0  
matplotlib                3.1.3                    py37_0  
matplotlib-base           3.1.3            py37h9aa3819_0  
mccabe                    0.6.1                    py37_1  
mistune                   0.8.4            py37h1de35cc_0  
mkl                       2019.4                      233  
mkl-service               2.3.0            py37hfbe908c_0  
mkl_fft                   1.0.15           py37h5e564d8_0  
mkl_random                1.1.1            py37h959d312_0  
mock                      4.0.2                      py_0  
more-itertools            8.3.0                      py_0  
mpc                       1.1.0                h6ef4df4_1  
mpfr                      4.0.1                h3018a27_3  
mpmath                    1.1.0                    py37_0  
msgpack-python            1.0.0            py37h04f5b5a_1  
multipledispatch          0.6.0                    py37_0  
munch                     2.5.0                      py_0  
nbconvert                 5.6.1                    py37_0  
nbformat                  5.0.6                      py_0  
ncurses                   6.2                  h0a44026_1  
netcdf4                   1.4.2            py37h13743db_0  
networkx                  2.4                        py_0  
nltk                      3.4.5                    py37_0  
nose                      1.3.7                    py37_2  
notebook                  6.0.3                    py37_0  
numba                     0.49.1           py37h86efe34_0  
numexpr                   2.7.1            py37hce01a72_0  
numpy                     1.18.1           py37h7241aed_0  
numpy-base                1.18.1           py37h3304bdc_1  
numpydoc                  0.9.2                      py_0  
olefile                   0.46                     py37_0  
openjpeg                  2.3.0                hb95cd4c_1  
openpyxl                  3.0.3                      py_0  
openssl                   1.1.1g               h0b31af3_0    conda-forge
owslib                    0.18.0                     py_0  
packaging                 20.3                       py_0  
pandas                    1.0.3            py37h6c726b0_0  
pandoc                    2.2.3.2                       0  
pandocfilters             1.4.2                    py37_1  
panel                     0.9.5                      py_0    pyviz
param                     1.9.3                      py_0    pyviz
parso                     0.5.2                      py_0  
partd                     1.1.0                      py_0  
path                      13.1.0                   py37_0  
path.py                   12.4.0                        0  
pathlib2                  2.3.5                    py37_0  
pathtools                 0.1.2                      py_1  
patsy                     0.5.1                    py37_0  
pcre                      8.43                 h0a44026_0  
pep8                      1.7.1                    py37_0  
pexpect                   4.8.0                    py37_0  
pickleshare               0.7.5                    py37_0  
pillow                    7.1.2            py37h4655f20_0  
pip                       20.0.2                   py37_3  
pixman                    0.38.0               h1de35cc_0  
pkginfo                   1.5.0.1                  py37_0  
plotly                    4.8.1                      py_0    plotly
pluggy                    0.13.1                   py37_0  
ply                       3.11                     py37_0  
poppler                   0.65.0               ha097c24_1  
poppler-data              0.4.9                         0  
proj4                     5.2.0                h0a44026_1  
prometheus_client         0.7.1                      py_0  
prompt-toolkit            3.0.5                      py_0  
prompt_toolkit            3.0.5                         0  
psutil                    5.7.0            py37h1de35cc_0  
ptyprocess                0.6.0                    py37_0  
py                        1.8.1                      py_0  
py-lief                   0.10.1           py37haf313ee_0  
pyarrow                   0.15.1           py37h6c726b0_0  
pycodestyle               2.5.0                    py37_0  
pycosat                   0.6.3            py37h1de35cc_0  
pycparser                 2.20                       py_0  
pycrypto                  2.6.1            py37h1de35cc_9  
pyct                      0.4.6                      py_0    pyviz
pyct-core                 0.4.6                      py_0    pyviz
pycurl                    7.43.0.5         py37ha12b0ac_0  
pydocstyle                4.0.1                      py_0  
pyepsg                    0.4.0                    py37_0  
pyflakes                  2.1.1                    py37_0  
pygments                  2.6.1                      py_0  
pykdtree                  1.3.1            py37h1d22016_2  
pylint                    2.5.2                    py37_0  
pyodbc                    4.0.30           py37h0a44026_0  
pyopenssl                 19.1.0                   py37_0  
pyparsing                 2.4.7                      py_0  
pyproj                    1.9.6            py37h9c430a6_0  
pyqt                      5.9.2            py37h655552a_2  
pyrsistent                0.16.0           py37h1de35cc_0  
pyshp                     2.1.0                      py_0  
pysocks                   1.7.1                    py37_0  
pytables                  3.6.1            py37h5bccee9_0  
pytest                    5.4.2                    py37_0  
pytest-arraydiff          0.3              py37h39e3cac_0  
pytest-astropy            0.8.0                      py_0  
pytest-astropy-header     0.1.2                      py_0  
pytest-doctestplus        0.5.0                      py_0  
pytest-openfiles          0.5.0                      py_0  
pytest-remotedata         0.3.2                    py37_0  
python                    3.7.7           hfe9666f_0_cpython  
python-dateutil           2.8.1                      py_0  
python-jsonrpc-server     0.3.4                      py_0  
python-language-server    0.31.10                  py37_0  
python-libarchive-c       2.9                        py_0  
python.app                2                       py37_10  
python_abi                3.7                     1_cp37m    conda-forge
pytz                      2020.1                     py_0  
pyviz_comms               0.7.4                      py_0    pyviz
pywavelets                1.1.1            py37h1de35cc_0  
pyyaml                    5.3.1            py37h1de35cc_0  
pyzmq                     18.1.1           py37h0a44026_0  
qdarkstyle                2.8.1                      py_0  
qt                        5.9.7                h468cd18_1  
qtawesome                 0.7.0                      py_0  
qtconsole                 4.7.4                      py_0  
qtpy                      1.9.0                      py_0  
re2                       2020.06.01           h4a8c4bd_0    conda-forge
readline                  7.0                  h1de35cc_5  
requests                  2.23.0                   py37_0  
retrying                  1.3.3                    py37_2  
ripgrep                   11.0.2               he32d670_0  
rope                      0.17.0                     py_0  
rtree                     0.9.4                    py37_1  
ruamel_yaml               0.15.87          py37h1de35cc_0  
scikit-image              0.16.2           py37h6c726b0_0  
scikit-learn              0.22.1           py37h27c97d8_0  
scipy                     1.4.1            py37h9fa6033_0  
seaborn                   0.10.1                     py_0  
selenium                  3.141.0         py37h9bfed18_1001    conda-forge
send2trash                1.5.0                    py37_0  
setuptools                46.4.0                   py37_0  
shapely                   1.6.4            py37he8793f5_0  
simplegeneric             0.8.1                    py37_2  
singledispatch            3.4.0.3                  py37_0  
sip                       4.19.8           py37h0a44026_0  
six                       1.14.0                   py37_0  
snappy                    1.1.7                he62c110_3  
snowballstemmer           2.0.0                      py_0  
sortedcollections         1.1.2                    py37_0  
sortedcontainers          2.1.0                    py37_0  
soupsieve                 2.0.1                      py_0  
sphinx                    3.0.3                      py_0  
sphinxcontrib             1.0                      py37_1  
sphinxcontrib-applehelp   1.0.2                      py_0  
sphinxcontrib-devhelp     1.0.2                      py_0  
sphinxcontrib-htmlhelp    1.0.3                      py_0  
sphinxcontrib-jsmath      1.0.1                      py_0  
sphinxcontrib-qthelp      1.0.3                      py_0  
sphinxcontrib-serializinghtml 1.1.4                      py_0  
sphinxcontrib-websupport  1.2.1                      py_0  
spyder                    4.1.3                    py37_0  
spyder-kernels            1.9.1                    py37_0  
sqlalchemy                1.3.17           py37haf1e3a3_0  
sqlite                    3.31.1               h5c1f38d_1  
statsmodels               0.11.1           py37haf1e3a3_0  
sympy                     1.5.1                    py37_0  
tbb                       2020.0               h04f5b5a_0  
tblib                     1.6.0                      py_0  
terminado                 0.8.3                    py37_0  
testpath                  0.4.4                      py_0  
thrift-cpp                0.11.0               hd79cdb6_3  
tk                        8.6.8                ha441bb4_0  
toml                      0.10.0           py37h28b3542_0  
toolz                     0.10.0                     py_0  
tornado                   6.0.4            py37h1de35cc_1  
tqdm                      4.46.0                     py_0  
traitlets                 4.3.3                    py37_0  
typed-ast                 1.4.1            py37h1de35cc_0  
typing_extensions         3.7.4.1                  py37_0  
ujson                     1.35             py37h1de35cc_0  
unicodecsv                0.14.1                   py37_0  
unixodbc                  2.3.7                h1de35cc_0  
uriparser                 0.9.3                h6de7cb9_1    conda-forge
urllib3                   1.25.8                   py37_0  
watchdog                  0.10.2           py37h1de35cc_0  
wcwidth                   0.1.9                      py_0  
webencodings              0.5.1                    py37_1  
werkzeug                  1.0.1                      py_0  
wheel                     0.34.2                   py37_0  
widgetsnbextension        3.5.1                    py37_0  
wrapt                     1.11.2           py37h1de35cc_0  
wurlitzer                 2.0.0                    py37_0  
xarray                    0.15.1                     py_0  
xerces-c                  3.2.2                h44e365a_0  
xlrd                      1.2.0                    py37_0  
xlsxwriter                1.2.8                      py_0  
xlwings                   0.19.4                   py37_0  
xlwt                      1.3.0                    py37_0  
xz                        5.2.5                h1de35cc_0  
yaml                      0.1.7                hc338f04_2  
yapf                      0.28.0                     py_0  
zeromq                    4.3.1                h0a44026_3  
zict                      2.0.0                      py_0  
zipp                      3.1.0                      py_0  
zlib                      1.2.11               h1de35cc_3  
zstd                      1.3.7                h5bba6e5_0  

I am using OSX 10.15.5 and Firefox 77.0.1

jbednar commented 4 years ago

We'd love to have support for a Plotly backend for hvPlot (and for a Matplotlib backend), but currently only Bokeh is available as a backend. The underlying HoloViews library already supports Plotly and Matplotlib, but enabling that support in hvPlot for either Matplotlib or Plotly is a time-consuming project involving translating between the Pandas .plot() API and the underlying HoloViews option syntax for each of the available plot types. Setting up all those translations is a suitable project for a Plotly (or Matplotlib) user to contribute (with core-developer guidance); we've done it ourselves for Bokeh because at present we are mainly using Bokeh.

MarcSkovMadsen commented 4 years ago

I ran into this issue as well as I am using hvPlot to generate plots and would allow the user to select the

BACKENDS = ["bokeh", "plotly", "matplotlib"] KINDS = ["area", "bar", "barh", "line", "scatter", "step", "table"]

Thought this was supported. But apparently not. Would be a killer feature (and add vega-lite and echarts to the mix :-))

Code

import itertools

import holoviews as hv
import hvplot.pandas
import pandas as pd
import plotly
import pytest

hv.extension("plotly", "matplotlib")
BACKENDS = ["bokeh", "plotly", "matplotlib"]
KINDS = ["area", "bar", "barh", "line", "scatter", "step", "table"]

@pytest.fixture()
def data():
    return pd.DataFrame({"x": [1, 2, 3], "y": [2, 4, 1],})

@pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
def test_backend_kind(data, backend, kind):
    hv.output(backend=backend)
    data.hvplot(x="x", y="y", kind=kind)
$ pytest 'scripts\test_backends.py'
Test session starts (platform: win32, Python 3.7.6, pytest 5.4.2, pytest-sugar 0.9.3)
rootdir: C:\repos\private\awesome-panel, inifile: pytest.ini
plugins: cov-2.8.1, mock-3.1.0, sugar-0.9.3
collecting ... 
 scripts/test_backends.py ✓                                                                 5% ▌
 scripts/test_backends.py ✓✓                                                               10% ▉
 scripts/test_backends.py ✓✓✓                                                              14% █▌
 scripts/test_backends.py ✓✓✓✓                                                             19% █▉
 scripts/test_backends.py ✓✓✓✓✓                                                            24% ██▍
 scripts/test_backends.py ✓✓✓✓✓✓                                                           29% ██▉
 scripts/test_backends.py ✓✓✓✓✓✓✓                                                          33% ███▍

―――――――――――――――――――――――――――――――――――― test_backend_kind[plotly-area] ――――――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'plotly', kind = 'area'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1336: in area
    areas = self.chart(Area, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1303: in chart
    return self.single_chart(element, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'alpha', objtype = 'Area', backend = 'plotly'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'aspect', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
                                 (opt, objtype, backend, matches))
            else:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. No '
                                 'similar options founds.' %
>                                (opt, objtype, backend))
E               ValueError: Unexpected option 'alpha' for Area type when using the 'plotly' extension. No similar options founds.

.venv\lib\site-packages\holoviews\util\__init__.py:398: ValueError

 scripts/test_backends.py ⨯                                                                38% ███▊

―――――――――――――――――――――――――――――――――――― test_backend_kind[plotly-bar] ―――――――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'plotly', kind = 'bar'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1386: in bar
    return self.single_chart(Bars, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'bar_width', objtype = 'Bars', backend = 'plotly'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'aspect', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
>                                (opt, objtype, backend, matches))
E               ValueError: Unexpected option 'bar_width' for Bars type when using the 'plotly' extension. Similar options are: ['width'].

.venv\lib\site-packages\holoviews\util\__init__.py:393: ValueError

 scripts/test_backends.py ⨯                                                                43% ████▍

―――――――――――――――――――――――――――――――――――― test_backend_kind[plotly-barh] ――――――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'plotly', kind = 'barh'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1390: in barh
    return self.bar(x, y, data).opts('Bars', invert_axes=True)
.venv\lib\site-packages\hvplot\converter.py:1386: in bar
    return self.single_chart(Bars, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'bar_width', objtype = 'Bars', backend = 'plotly'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'aspect', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
>                                (opt, objtype, backend, matches))
E               ValueError: Unexpected option 'bar_width' for Bars type when using the 'plotly' extension. Similar options are: ['width'].

.venv\lib\site-packages\holoviews\util\__init__.py:393: ValueError

 scripts/test_backends.py ⨯                                                                48% ████▊

―――――――――――――――――――――――――――――――――――― test_backend_kind[plotly-line] ――――――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'plotly', kind = 'line'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1326: in line
    return self.chart(Curve, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1303: in chart
    return self.single_chart(element, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'muted_alpha', objtype = 'Curve', backend = 'plotly'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'aspect', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
                                 (opt, objtype, backend, matches))
            else:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. No '
                                 'similar options founds.' %
>                                (opt, objtype, backend))
E               ValueError: Unexpected option 'muted_alpha' for Curve type when using the 'plotly' extension. No similar options founds.

.venv\lib\site-packages\holoviews\util\__init__.py:398: ValueError

 scripts/test_backends.py ⨯                                                                52% █████▎

―――――――――――――――――――――――――――――――――― test_backend_kind[plotly-scatter] ―――――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'plotly', kind = 'scatter'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1333: in scatter
    return self.chart(Scatter, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1303: in chart
    return self.single_chart(element, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'legend_position', objtype = 'Scatter', backend = 'plotly'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'aspect', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
                                 (opt, objtype, backend, matches))
            else:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. No '
                                 'similar options founds.' %
>                                (opt, objtype, backend))
E               ValueError: Unexpected option 'legend_position' for Scatter type when using the 'plotly'
extension. No similar options founds.

.venv\lib\site-packages\holoviews\util\__init__.py:398: ValueError

 scripts/test_backends.py ⨯                                                                57% █████▊

―――――――――――――――――――――――――――――――――――― test_backend_kind[plotly-step] ――――――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'plotly', kind = 'step'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1330: in step
    return self.line(x, y, data).options('Curve', interpolation='steps-'+where)
.venv\lib\site-packages\hvplot\converter.py:1326: in line
    return self.chart(Curve, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1303: in chart
    return self.single_chart(element, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'muted_alpha', objtype = 'Curve', backend = 'plotly'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'aspect', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
                                 (opt, objtype, backend, matches))
            else:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. No '
                                 'similar options founds.' %
>                                (opt, objtype, backend))
E               ValueError: Unexpected option 'muted_alpha' for Curve type when using the 'plotly' extension. No similar options founds.

.venv\lib\site-packages\holoviews\util\__init__.py:398: ValueError

 scripts/test_backends.py ⨯                                                                62% ██████▎
 scripts/test_backends.py ⨯✓                                                               67% ██████▋

―――――――――――――――――――――――――――――――――― test_backend_kind[matplotlib-area] ――――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'matplotlib', kind = 'area'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1336: in area
    areas = self.chart(Area, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1303: in chart
    return self.single_chart(element, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'height', objtype = 'Area', backend = 'matplotlib'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'apply_ticks', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
                                 (opt, objtype, backend, matches))
            else:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. No '
                                 'similar options founds.' %
>                                (opt, objtype, backend))
E               ValueError: Unexpected option 'height' for Area type when using the 'matplotlib' extension. No similar options founds.

.venv\lib\site-packages\holoviews\util\__init__.py:398: ValueError

 scripts/test_backends.py ⨯                                                                71% ███████▎

―――――――――――――――――――――――――――――――――― test_backend_kind[matplotlib-bar] ―――――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'matplotlib', kind = 'bar'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1386: in bar
    return self.single_chart(Bars, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'bar_width', objtype = 'Bars', backend = 'matplotlib'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'apply_ticks', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
>                                (opt, objtype, backend, matches))
E               ValueError: Unexpected option 'bar_width' for Bars type when using the 'matplotlib' extension. Similar options are: ['cbar_width'].

.venv\lib\site-packages\holoviews\util\__init__.py:393: ValueError

 scripts/test_backends.py ⨯                                                                76% ███████▋

―――――――――――――――――――――――――――――――――― test_backend_kind[matplotlib-barh] ――――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'matplotlib', kind = 'barh'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1390: in barh
    return self.bar(x, y, data).opts('Bars', invert_axes=True)
.venv\lib\site-packages\hvplot\converter.py:1386: in bar
    return self.single_chart(Bars, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'bar_width', objtype = 'Bars', backend = 'matplotlib'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'apply_ticks', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
>                                (opt, objtype, backend, matches))
E               ValueError: Unexpected option 'bar_width' for Bars type when using the 'matplotlib' extension. Similar options are: ['cbar_width'].

.venv\lib\site-packages\holoviews\util\__init__.py:393: ValueError

 scripts/test_backends.py ⨯                                                                81% ████████▏

―――――――――――――――――――――――――――――――――― test_backend_kind[matplotlib-line] ――――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'matplotlib', kind = 'line'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1326: in line
    return self.chart(Curve, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1303: in chart
    return self.single_chart(element, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'height', objtype = 'Curve', backend = 'matplotlib'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'apply_ticks', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
                                 (opt, objtype, backend, matches))
            else:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. No '
                                 'similar options founds.' %
>                                (opt, objtype, backend))
E               ValueError: Unexpected option 'height' for Curve type when using the 'matplotlib' extension. No similar options founds.

.venv\lib\site-packages\holoviews\util\__init__.py:398: ValueError

 scripts/test_backends.py ⨯                                                                86% ████████▋

―――――――――――――――――――――――――――――――― test_backend_kind[matplotlib-scatter] ―――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'matplotlib', kind = 'scatter'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1333: in scatter
    return self.chart(Scatter, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1303: in chart
    return self.single_chart(element, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'height', objtype = 'Scatter', backend = 'matplotlib'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'apply_ticks', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
                                 (opt, objtype, backend, matches))
            else:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. No '
                                 'similar options founds.' %
>                                (opt, objtype, backend))
E               ValueError: Unexpected option 'height' for Scatter type when using the 'matplotlib' extension. No similar options founds.

.venv\lib\site-packages\holoviews\util\__init__.py:398: ValueError

 scripts/test_backends.py ⨯                                                                90% █████████▏

―――――――――――――――――――――――――――――――――― test_backend_kind[matplotlib-step] ――――――――――――――――――――――――――――――――――

data =    x  y
0  1  2
1  2  4
2  3  1, backend = 'matplotlib', kind = 'step'

    @pytest.mark.parametrize(["backend", "kind"], list(itertools.product(BACKENDS, KINDS)))
    def test_backend_kind(data, backend, kind):
        hv.output(backend=backend)
>       data.hvplot(x="x", y="y", kind=kind)

scripts\test_backends.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.venv\lib\site-packages\hvplot\plotting\core.py:72: in __call__
    return self._get_converter(x, y, kind, **kwds)(kind, x, y)
.venv\lib\site-packages\hvplot\converter.py:1024: in __call__
    obj = method(x, y)
.venv\lib\site-packages\hvplot\converter.py:1330: in step
    return self.line(x, y, data).options('Curve', interpolation='steps-'+where)
.venv\lib\site-packages\hvplot\converter.py:1326: in line
    return self.chart(Curve, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1303: in chart
    return self.single_chart(element, x, y, data)
.venv\lib\site-packages\hvplot\converter.py:1231: in single_chart
    return chart.redim(**self._redim).opts(opts)
.venv\lib\site-packages\holoviews\core\accessors.py:45: in pipelined_call
    result = __call__(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:557: in __call__
    return self._dispatch_opts( *args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:561: in _dispatch_opts
    return self._base_opts(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\accessors.py:640: in _base_opts
    return self._obj.options(*new_args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:214: in pipelined_fn
    result = method_fn(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\data\__init__.py:1165: in options
    return super(Dataset, self).options(*args, **kwargs)
.venv\lib\site-packages\holoviews\core\dimension.py:1288: in options
    expanded_backends = opts._expand_by_backend(options, backend)
.venv\lib\site-packages\holoviews\util\__init__.py:320: in _expand_by_backend
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:320: in <listcomp>
    return [(bk, cls._expand_options(o, bk)) for (bk, o) in groups.items()]
.venv\lib\site-packages\holoviews\util\__init__.py:374: in _expand_options
    cls._options_error(opt, objtype, backend, valid_options)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cls = <class 'holoviews.util.opts'>, opt = 'height', objtype = 'Curve', backend = 'matplotlib'
valid_options = ['axiswise', 'framewise', 'backend', 'apply_extents', 'apply_ranges', 'apply_ticks', ...]

    @classmethod
    def _options_error(cls, opt, objtype, backend, valid_options):
        """
        Generates an error message for an invalid option suggesting
        similar options through fuzzy matching.
        """
        current_backend = Store.current_backend
        loaded_backends = Store.loaded_backends()
        kws = Keywords(values=valid_options)
        matches = sorted(kws.fuzzy_match(opt))
        if backend is not None:
            if matches:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. Similar '
                                 'options are: %s.' %
                                 (opt, objtype, backend, matches))
            else:
                raise ValueError('Unexpected option %r for %s type '
                                 'when using the %r extension. No '
                                 'similar options founds.' %
>                                (opt, objtype, backend))
E               ValueError: Unexpected option 'height' for Curve type when using the 'matplotlib' extension. No similar options founds.

.venv\lib\site-packages\holoviews\util\__init__.py:398: ValueError

 scripts/test_backends.py ⨯                                                                95% █████████▌ scripts/test_backends.py ⨯✓                                                              100% ██████████
======================================= short test summary info ========================================
FAILED scripts/test_backends.py::test_backend_kind[plotly-area] - ValueError: Unexpected option 'alpha...
FAILED scripts/test_backends.py::test_backend_kind[plotly-bar] - ValueError: Unexpected option 'bar_wi...
FAILED scripts/test_backends.py::test_backend_kind[plotly-barh] - ValueError: Unexpected option 'bar_w...
FAILED scripts/test_backends.py::test_backend_kind[plotly-line] - ValueError: Unexpected option 'muted...
FAILED scripts/test_backends.py::test_backend_kind[plotly-scatter] - ValueError: Unexpected option 'le...
FAILED scripts/test_backends.py::test_backend_kind[plotly-step] - ValueError: Unexpected option 'muted...
FAILED scripts/test_backends.py::test_backend_kind[matplotlib-area] - ValueError: Unexpected option 'h...
FAILED scripts/test_backends.py::test_backend_kind[matplotlib-bar] - ValueError: Unexpected option 'ba...
FAILED scripts/test_backends.py::test_backend_kind[matplotlib-barh] - ValueError: Unexpected option 'b...
FAILED scripts/test_backends.py::test_backend_kind[matplotlib-line] - ValueError: Unexpected option 'h...
FAILED scripts/test_backends.py::test_backend_kind[matplotlib-scatter] - ValueError: Unexpected option...
FAILED scripts/test_backends.py::test_backend_kind[matplotlib-step] - ValueError: Unexpected option 'h...

Results (7.97s):
       9 passed
      12 failed
         - scripts/test_backends.py:18 test_backend_kind[plotly-area]
         - scripts/test_backends.py:18 test_backend_kind[plotly-bar]
         - scripts/test_backends.py:18 test_backend_kind[plotly-barh]
         - scripts/test_backends.py:18 test_backend_kind[plotly-line]
         - scripts/test_backends.py:18 test_backend_kind[plotly-scatter]
         - scripts/test_backends.py:18 test_backend_kind[plotly-step]
         - scripts/test_backends.py:18 test_backend_kind[matplotlib-area]
         - scripts/test_backends.py:18 test_backend_kind[matplotlib-bar]
         - scripts/test_backends.py:18 test_backend_kind[matplotlib-barh]
         - scripts/test_backends.py:18 test_backend_kind[matplotlib-line]
         - scripts/test_backends.py:18 test_backend_kind[matplotlib-scatter]
         - scripts/test_backends.py:18 test_backend_kind[matplotlib-step]
(.venv)
MarcSkovMadsen commented 4 years ago

I guess there is also something to consider here as pandas now supports setting a backend and/ or there are alternative plotting backends. So how many backends should hvplot support?

jbednar commented 4 years ago

We should be careful to distinguish between hvPlot supporting backends that HoloViews already supports, and any other potential backends. hvPlot is built on HoloViews, and currently supports (a) generating HoloViews objects, and (b) setting up, configuring, and translating user-provided .plot() API options so that the HoloViews objects are configured appropriately for the Bokeh backend.

The result is that hvPlot only currently fully supports Bokeh, in the sense of (a) and (b). Support of type (b) could be added for any other backend supported by HoloViews, namely Matplotlib and Plotly, which would be a straightforward project but would require either a paid project or a dedicated volunteer; no one on the current team is volunteering to support either of these HoloViews backends in conjunction with hvPlot. I personally would love to see that happen for both Matplotlib and hvPlot, and hope that we do get a volunteer or a financial contribution towards either of those two goals, but until one of those two things happens, I do not anticipate seeing a Matplotlib or Plotly backend for hvPlot appear.

Support for other backends not currently supported by HoloViews is an entirely different matter; eplot, altair_pandas, and pandas_bokeh are all entirely unrelated to HoloViews and supporting them in hvPlot would require first adding them as new backends in HoloViews, and only then adding support of type (b) for those backends in hvPlot. Doing so seems like quite a lot of work for no obvious gain; pandas_bokeh doesn't offer any significant functionality not already available in the Bokeh backend, and altair is also mostly duplicative except for styling issues. echarts/Pyecharts I'm less sure of, but with as much effort as is required to add an entirely new backend, I'd urge people just to improve the existing underlying libraries instead (plotly, bokeh, and matplotlib) so that our efforts do not get spread too thin. The three current HoloViews backends offer quite distinct and typically non-overlapping functionality (interactive 3D from Plotly, publication-quality SVG from Matplotlib, server-based interactivity from Bokeh), but there's much more diminishing returns from adding additional HoloViews backends at this point, and until/unless they are added to HoloViews, they can't meaningfully be added to hvPlot.

malekop commented 4 years ago

Thanks for the explanation James.

It's frustrating as I had it all working as desired on an old device using old library versions but I unfortunately can't seem to recreate this setup and now have static box plots again.

Is there an alternative way to produce interactive boxplots using one of the holoviz libraries? I tried to just use holoviews instead of hvplot but if I use Plotly backend then I just don't see an output in my jupyter notebook when I try to plot.

Or are interactive boxplots just not possible anymore?

philippjfr commented 4 years ago

@malekop I can't reproduce any issues, you'd really have to file an issue with your versions:

Screen Shot 2020-07-21 at 2 19 44 PM

maximlt commented 2 years ago

hvPlot now supports Plotly as a backend.