Releases: holoviz/holoviews
Release list
Version 1.23.1
This patch release includes a number of bug fixes. Thanks to @hoxbro for their contributions.
Bug Fixes:
- Avoid memory leak from
hv.streamswhen usingpartial.functoolswith methods (#6941) - Allow dictionary as an
cmapinput for categorical data with the Plotly backend (#6940) - Fix
rasterizeonhv.Spreadswapped order of positive and negative error bars (#6933) - Support stacked
hv.Barswith narwhals backend (#6930)
Version 1.23.0
This release introduces new chart types including Donut and Waterfall, along with significant performance improvements, and numerous bug fixes.
Many thanks to @AR21SM (first contribution), @Chetansahney (first contribution), @ghostiee-11 (first contribution), @mvanhorn (first contribution), @SimonHeybrock (first contribution), @ahuang11, @Azaya89, @JulianGiles, @MarcSkovMadsen, @philippjfr, @stanwest, @thuydotm, and @hoxbro for their contributions.
Features:
- Add
Donutchart (#6848) - Add
Waterfallchart (#6847) - Add
categorical_aggoperation for linked selections with categorical Bars (#6804)
Breaking changes:
- Removal of deprecated parameters:
color_index,size_index,scaling_factor,scaling_method,size_fn(#6819) - Removal of HoloViews IPython magic, deprecated since 1.21.0 (#6781)
- Only support
HOLOVIEWSRCenvironment variable for custom config, deprecated since 1.21.0 (#6782) - Removal of old location of IPTestCase, deprecated since 1.21.0 (#6782)
- Removal of streamz support, deprecated since 1.21.0 (#6782)
- Removal of binder links (#6822)
Deprecations:
- Deprecate dash support, removal in 1.24.0 (#6867)
- Warning about deprecated old API (
holoviews.core.options.Optsandholoviews.core.dimension.redim), removal in 1.24.0 (#6863) - Deprecation of
holoviews.element.comparisonforholoviews.testing, removal in 1.25.0 (#6735)
Enhancements:
- Add baseline opt to
Barsfor floating bar charts (#6896) - Small improvements to
Spread(#6883) - Remove use of explicit
raise Exception(#6866) - Support all narwhals stable versions (#6844)
- Handle xarray
Datasetforrolling_outliers_std(#6763) - Support
selectorandds.summaryforgeom_aggregator(#6743)
Bug Fixes:
- Remove extra space in some warnings of irregular sampling (#6916)
- Allow image coordinate irregularity equal to the tolerance (#6915)
- Handle undeclared aggregator column in
_resolve_agg_column_name(#6908) - Prevent exponential custom-option id growth on re-customization (#6904)
- Interpolation curves crash on empty input (#6903)
- Add exception logging to
Stream.trigger(#6902) - Norm and vmin/vmax in raster.py (#6889)
- Datetime with HeatMap (#6877)
- Memory leak in
Stream._subscribers(#6875) - HMAC-sign Dash store data (#6867)
- Missing Interface import (#6854)
- Avoid trying to match dimension by name (#6853)
- Add timezone handling for xarray backend (#6849)
- Don't clip matplotlib animation (#6845)
- Check
narwhals.Seriesis alsoarraylike(#6829) - Fix Bars crash with datetime x-axis for single or duplicate values (#6820)
- Raise error if RGB getitem uses Ellipsis with bad name (#6818)
- Self passed in
super().__init__(#6817) - Display colorbar label from value dimension in Bokeh (#6815)
- Prevent duplicate legend entries in
BoxWhiskerplot in Bokeh (#6809) - Labels with offset raising unreachable code in Bokeh (#6800)
- Prevent Matplotlib from overriding
Cycle.default_cycleswith RGB tuples (#6798) - BoxEdit stream data not initialized for Rectangles (#6786)
- Sync visibility with PolyDraw/PolyEdit (#6784)
- Support pandas dtypes for interpolation (#6783)
- Handle
NdMappingwith explicit tuple set slicing with dimension values (#6780) - Check for zero height in
get_aspectto prevent ZeroDivisionError (#6779) - Fix extra hover tooltips for labels (#6774)
- Categorical color mapping for Polygons in mpl backend (#6762)
- Categorical color error for Scatter plotly plot (#6758)
- Handle datetime with timezone in rasterize (#6757)
isdatetimecheck for arraylike (#6755)- Seed range streams on initial draw of overlay plots (#6922)
Performance:
- Cache static layout properties in
_update_plotin Bokeh (#6839) - Skip param.update when plot options unchanged (#6837)
- Skip Bokeh property validation in
_update_datasourcein Bokeh (#6835) - Disable pipeline bookkeeping during plot refresh (#6832)
- Cache
gen_typestype tuples (#6831) - Remove dead
hasattrcheck triggering difflib in Bokeh (#6830) - Add numeric fast path to
max_rangeanddimension_range(#6806) - Remove
packagingdependency forregex(#6857)
Type Annotations:
- Add type checking on isolated and utility files (#6851)
- Support latest param dev release and use param.descendents (#6869)
- Update ty version and small fixes (#6859)
- Enable type checking ruff rules (#6850)
Compatibility:
- Numpy 2.5.0 (#6924)
- cuDF 25.12 to 26.06 (#6754, #6795, #6852, #6907)
- Panel 1.9.0 (#6890)
- Matplotlib 3.11.0 (#6856)
- Ibis 12 (#6840)
Refactoring:
- Enable flake8-comprehensions (C4) and pygrep-hooks (PGH) (#6865)
- Enable ruff formatting (#6810)
- Make test use
hv.import if it is top-level import (#6803) - Remove
*imports and update__all__to be static (#6802) - Don't have test inheriting from
unittest.TestCase(#6735)
Governance:
- Add governance (#6752)
Documentation:
- Import panel in Flask + Bokeh deployment example (#6881)
- Convert
.rstfiles to.md(#6823) - Update docstring for interface (#6789)
- Improve Scatter docstring (#6778)
- Move hover tool's example import up (#6773)
- Add documentation for
legend_opts(#6751) - Update tools description (#6768)
- Update roadmap ([#6756](https://github.com/holoviz/holovi...
Version 1.22.1
This patch release includes a number of bug fixes and enhancements, and adds compatibility with Pandas 3.
Many thanks to @chrisbotica (first contribution), @JelmerBot (first contribution), @Azaya89, and @hoxbro for their contributions.
Enhancements:
- Add
text_outline_colorandtext_outline_widthstyle to Labels (Bokeh) (#6738, #6746) - Add support for timedelta axis and Narwhals duration (Bokeh) (#6734)
- Add numpy masked array to
masked_types(#6732)
Bug Fixes:
- Have hover tool work across different DynamicMaps elements (Bokeh) (#6748)
- Suppress Runtime warnings for negative size values (Matplotlib) (#6744)
- Don't error if
Heatmapis optimized and color style is used (#6730) - Narwhals Series not being seen as arraylike and not computing
dimexpression (#6729) - Check categorical legend dtypes for
categoriesbefore accessing it (#6053) - Element interface mask to allow for
np.nan(#5790)
Documentation:
- Add documentation for
legend_opts(Bokeh) (#6751)
Compatibility:
- Pandas 3.0.0 (#6749)
Version 1.22.0
This release adds Narwhals support for broader dataframe compatibility. By doing so, we now also support Polars and DuckDB data backends.
Another new feature is the addition of sizebar support for Points elements, allowing for better visualization of point sizes in plots.
Along with these new features, this release includes numerous enhancements, bug fixes, compatibility updates, and improved documentation.
Many thanks to @epaaso (first contribution), @thuydotm (first contribution), @ahuang11, @Azaya89, @maximlt, @philippjfr, @stanwest, and @hoxbro for their contributions.
New Features:
Enhancements:
- Add
gridstyleto matplotlib (#6700) - Add
from_sparseclassmethod forGraph(#6673) - Add support for synthetic legends on
ImageStackPlot(#6662) - Sync tools with Bokeh and use
auto_box_zoomas default (#6650) - Add hover filter (#6646)
- Improve error message for non-matching types when aspect is set to equal (#6103)
- Use
ImageStackas anelement_typeinrasterize(#6631) - Improve
core.utilto work better without pandas installed (#6702) - Implement
link_selections.unlink(#6685)
Deprecations:
- Deprecate
IbisInterfaceforNarwhalsInterface(#6718)
Performance:
- Optimize
HeatMaprendering path if gridded and contiguous (#6680) - Add debounce support to
PlotSizeandRangeXYBokeh callbacks (#6672) - Don't import IPython in
find_stack_level(#6724)
Bug Fixes:
- Interpolation for
Imagewithdatashade(#6707) subcoordinate_yforDynamicMapif labels mismatched between plots (#6694)- Setting
selection_exprprogrammatically (#6689) - Handle
node_colorin element transformations for Bokeh and MPL (#6678) hv.dimandhv.Dimensionas color opts for Matplotlib Path plots (#6721, #6665)- Use native bokeh
xmarker in plots and legends (#6676) - Silence Bokeh
FIXED_SIZING_MODEwarning on hv.save (#6674) - Comparison for non-numeric dtypes (#6671)
- Allow discovering
.applyoperation on pipeline (#6670) dendrogramedgecases (#6669)- Don't select in
decimateif start and end are the same (#6661)
Compatibility:
Version 1.21.0
This release adds support for sample information on hover for rasterized/datashaded plots, adds dendrogram plot, and adds logarithmic support for Histogram. Along with these new features, this release includes a number of enhancements, bug fixes, and improved documentation.
Many thanks to the new contributors @philipc2, @NolanBrb, and @sand-hanitizer, as well as the returning contributors @Azaya89, @LecrisUT, @maximlt, @michaelaye, @philippjfr, and @hoxbro.
This release bumps the minimum supported Python version to 3.10, deprecates the streamz interface, autoloading RC file, IPython magic, and using matplotlib as default backend for hv.extension which are all planned for removal in 1.23.0.
New features:
- Sample information on hover for rasterized/datashaded Bokeh plot (#6422, #6479, #6531, #6553, #6568, #6581, #6584, #6593, #6596, #6609)
- Add dendrogram plot (#6511, #6625, #6600)
- Add logarithmic support for Histogram (#6575)
Deprecations and removals:
- Minimum supported Python version is now 3.10 (#6549)
- Deprecate the
streamzinterface (planned removal in 1.23.0) (#6490) - Deprecate autoloading RC file (planned removal in 1.23.0) (#6610)
- Deprecate IPython magic (planned removal in 1.23.0) (#6610)
- Deprecate
hv.extension()forhv.extension("matplotlib")(planned removal in 1.23.0) (#6610) - Remove unused
hv.configparameters:future_deprecationsandwarn_options_call(#6610)
Enhancements:
- [Bokeh] Add
hide_toolbaroptions (#6602) - [Bokeh] Add
radiusandradius_dimensionto Point plot (#6599, #6613) - [Notebook] Add details option for AbbreviatedException (#6611)
- [Notebook] Improve the content displayed when loading the extension in a notebook (#6586)
- Add basic reactive expression support in a streams dictionary (#6563)
- Allow passing dimension as style mapping option #6614
- Support passing selection dictionary to
Dataset.select(#6617, #6626) - Pass the
backendinholoviews.opts.defaults(#6331) - Update norm function to handle edge case (#6366)
Performance:
- Defer Pandas import (#6476, #6574, #6582, #6585)
- Defer
datashader.bundlingto avoid numba compile time (#6616) - Defer Panel and Pandas imports in IPython (#6570)
Fixes:
- Correctly apply Bars style transforms (#6623)
- Don't assume all extents are string in
max_extents(#6571) - Histogram error with datatype
dask.arrayand backend Matplotlib (#6542) - Wrong empty element when using
apply_when(#6628) - Add legend to distribution for matplotlib backend (#6544)
- Improve
multi_yerror for single element (#6543) PandasInterface.selectwith an index and a column (#6579)- Skip overlay aggregate for
NdOverlayswith a count aggregator (#6619)
Documentation:
- Use numpydoc style for docstrings (#6506, #6556, #6583)
- Reduce warnings and apply fixes when building documentation (#6603, #6639)
- Small documentation corrections (#6539, #6604)
- Update documentation for plotting tools affected by the Bokeh 3.4 change (#6478)
Build:
Version 1.20.2
This micro release includes a couple of bug fixes, an enhancement, and compatibility updates.
Thank you to the new contributor @MikalaiPrakapenka, as well as the returning contributor @hoxbro.
Enhancements:
- Add active toggle to scalebar icon (#6473)
Bug fixes:
Compatibility:
Version 1.20.1
This micro release includes a number of bug fixes, enhancements, and compatibility updates.
Many thanks to the new contributors @spacetimeengineer, @flying-sheep, and @Azaya89, as well as the returning contributors @stanwest, @ahuang11, @maximlt, and @hoxbro
Enhancements:
- Faster spatialpandas unique scalar values (#6470)
Bug fixes:
IndexErrorassociated withHeatMap(#6438)- Propagate default_tools (#6451)
- Heatmap with non-sanitized name (#6462)
- Don't have linked axis between source and target for RangeToolLink (#6466)
- Empty
constant_keys(#6477) - Support pandas ExtensionArray ordering (#6481)
- Heatmap aggregation when kdims are in a Pandas multi-index (#6499)
- Support the case of multiple line segments each with one vdim (#6492)
Refactor:
Compatibility:
- Change
param.ObjectSelectorto recommendedparam.Selector(#6444) - Dask query-planning API support (#6446, #6494, #6503, #6495)
- Scipy 1.15 (#6480)
- cuDF 24.12 (#6475)
- Plotly 6.0 (#6504)
- Ruff 0.8 (#6459)
Documentation:
- Fix wrong variable name (#6442)
- Correct doc of "allow_jedi_completion" (#6485)
- Improve LSP information for
extension(#6461) - Add gallery intro with link to examples.holoviz.org (#6472)
Build:
CI:
Version 1.20.0
This release focuses on performance improvement, enhancing streaming support, and refining popup functionality, along with several bug fixes.
Many thanks to the new contributors @grapesmoker, @arafune, and @LecrisUT, as well as the returning contributors @ahuang11, @droumis, @jbednar, @maximlt, @philippjfr, and @hoxbro.
Enhancements
- De-parameterize the options
Keywordsobjects (#6314) - Freeze models while updating plot(s) (#6315)
- Support hit-tested group-wise wheel zoom renderers for
subcoordinate_y(#6277) - Adds Bokeh 3.5 enhancements to RangeToolLink (#6341)
- Add MultiAxisTap stream (#6374)
- Add
sublabel_indexandsublabel_skipoption for matplotlib backend (#6375) - Handle datetimes and empty selections better for inspect operations (#6377)
- Improve following behavior when streaming (#6318)
- Enh: Add
Scalebarsupport forsubcoordinate_yplots (#6403, #6420) - Support async callbacks for
popup(#6390) - Add
popupposition and anchor (#6414)
Bug fixes
- Wrap
popupinset_curdoc(#6337) - Fixes
popupbeing invisible forever after closing once (#6347) - Disable simple id in notebook (#6367)
- Ensure
pixel_ratiois applied when computing resampling coordinates (#6373) - Add support for rendering
HLine,VLineandSpanonmulti_y(#6376) - Drop the
zdimension fromImageStackDataArraybefore shading (#6378) - Improve datetime support for continuous
hv.Bars(#6365) - Don't clone Span in
HoverTool(#6387) - Ensure proper cleanup of stream subscribers (#6389)
- Handle datetime selection in the
cuDFinterface (#6407) - Fix
popuppositioning on polygons (#6411) - Fix a problem where linked selections were resulting in repeated columns (#6336)
- Ensure streams are correctly mapped to plots (#6415)
- Fix
Barswidth for small discrete differences on the x-axis (#6428) - Documentation fixes (#6392, #6421)
- Fix rasterizing a
Pathwhere categorical values include empty strings (#6429)
Compatibility
Version 1.19.1
This micro release includes a number of bug fixes and enhancements, as well as compatibility updates.
Thanks to @maximlt and @hoxbro for their contributions.
Enhancements
- Add color to bars for Plotly backend (#6294)
Bug fixes
- Ensure no auto index is created when a kdim is part of a multi index (#6299)
- Fix
hv.Barswith only one value in it (#6301) - Set
zIndexof Popup to 1000 (#6297) - Handle boolean input in categorically grouped
Barsplots (#6304) - Also check for
pd.NAinis_nan(#6290)
Compatibility
- Compatibility with Bokeh 3.5 (#6267)
- Compatibility with Matplotlib 3.9 (#6307)
- pandas: Fix observed FutureWarning for categorial groupby (#6306)
- Lazy load
dask.dataframeinoperations.datashader(#6309)
Maintenance
Version 1.19.0
This release introduces a number of major new features and enhancements, including the ability to add popups to your Bokeh figures, which allows you to drill down into subsets of your data easily.
Additionally, this release retains and uses pandas (multi-)indexes without unnecessary copies, providing significant benefits for working with wide data.
A major focus of this release has also been to improve the time it takes to plot large datasets, both by updating the data pipeline and reducing the amount of data send to the browser.
Furthermore, we have improved the developer experience, making it easier to contribute to HoloViews, see the developer guide.
Lastly bugs have been squashed and enhancements made to the existing features.
Thank you to @mirage007 and @WesleyTheGeolien for their first contributions and to the returning contributors @douglas-raillard-arm, @jj-github-jj, and @TheoMathurin.
Another thanks to the maintainers @ahuang11, @droumis, @maximlt, @philippjfr, and @hoxbro.
New features
Enhancements
- Override Curve's count aggregator default to
self_intersect=False(#6030) - Zoom tools automatically vertically scaled on
subcoordinate_yoverlays (#6051) - Use
tsdownsamplelibrary for downsampling if available (#6059, #6083) - Add viewport downsample algorithm (#6017)
- Optimize
downsample1dwhen data is shared between layers (#6075) - Support dictionary cmaps for
ImageStack(#6025) - Expose
hit_dilationinPointPlot(#6121) - Improve autocompletion for lazy module (#6174)
Subcoordinate_y: reverse the renderers by default (#6194)- Add
hover_tooltips,hover_mode,hover_formattersopts to easily modify hover (#6180) - Expose setting hard navigable bounds (#6056)
- Add a zoom tool per
subcoordinate_ygroup (#6122) - Support all Bokeh Text style opts in
hv.Labelsandhv.Text(#6198) - Implement support for retaining
Pandasindex (#6061) - Add operation for group-wise normalisation (#6124)
- Allow Bars to be plotted on continuous axes (#6145)
- Add
min_intervalandmax_intervalto theRangeToolLink(#6134) - Add support for rasterizing
geopandasdataframes directly (#5958) - Allow options for non-enabled backends (#6196)
- Support
ImageStackin dynspread (#6024) - Add support for
cticks(#6257) - Support title font size in Plotly backend (#5920)
- Hold rendering until a plot has been fully updated (#6265)
- Make
Dimension.labelsource of truth for Dimension identity (#6262) - Allow subcoordinates to be drawn from NdOverlay dimensions (#6209)
- Add stream transform (#6230)
Bug fixes
- Don't show figures toolbar on
GridSpace(#6127) - Update merge_tool (#6141)
- Don't raise
KeyErrorif options don't contain None (#6153) - Force vdims to strings for
ImageStack(#6155) - Fixes to Bokeh
BoxWhisker(#6169) - Improve groupby behavior for operation
histogram(#6172) - Ensure plot ranges for all renderers are combined in auto-ranging (#6173)
- Ensure that the downsample algorithm
m4n_out is always a multiple of 4 (#6195) - Subcoordinate_y: respect
ylim(#6190) - Bug fix for player example pause button (#6212)
- Clone if a Tool is as Bokeh model (#6220)
- Fix violin plot in
Plotly(#6237) - Don't error on
TypeErrorinDaskInterfacewhen sorting (#6221) - Fix
hv.helpifInfo.storeisNone(#6250) - Change how upper limit is taken for
color_levels(#4898) - Fix vectorfield hover (#6258)
- Ensure Range streams and
RangeToolLinkrespect subcoordinate axis range (#6256) - Fix pickling state (#6245)
- Fix colab rendering (#6269)
- Disable batching when
subcoordinate_yis enabled (#6272) - Ensure downsample works with non-contiguous arrays (#6271)
- Fix issue with range lookups in (y)-axis creation (#6274)
Dependencies updates
- Update
paramminimum version to 2.0 (#6230) - Update
numpy >=1.21,pandas >= 1.3, andBokeh >=3.1(#6253)
Compatibility
- Update test for Bokeh 3.4 (#6130)
- Test with dask-expr (#6259, #6149)
- Numpy 2.0 compatibility (#6238)
- Update to support cudf 2024.06 (#6263)
Documentation
- Minor typos (#6179, #6193)
- Update CSS for documentation (#6228)
- Fix links (#6246, #6036)
- Document
subcoordinate_group_rangesby extending the EEG Viewer demo (#6243)
Maintenance
- Switch to Pixi for development / CI and hatchling for build system (#6182, #6200, #6251)
- Add
test-gputask for Pixi (#6217) - Add
sync-git-tagstask to Pixi for sync git tags with upstream repo (#6215) - Parallelize unit test (#6234)
- Use
psutilforpytest-xdistlogicaloption (#6213) - Bump CI tests to use Python 3.12 (#5978)
- Only run test-suite on code change (#6035)
- Add skip statement to all steps to work with required (#6037)
- Add true if inputs.cache is not set (#6050)
- Dynamic generate unit test matrix and add cache option (#6043)
- Add prettier to markdown and yaml (#6040)
- Add taplo as toml formatter (#6227)
- Disable always on warnings (#6077)
- Updating Package workflow to a build and a publish step (#6031)
- Use the new conda package format (#6216)