3.1.0 - 2025-10-19¶
← Previous: 3.0.3 | 📋 All Releases | 🏷️ GitHub Release
Summary: This release adds faceting and animation support for multidimensional plots and redesigns the documentation website. Plotting results across scenarios or periods is now significantly simpler (Plotly only).
If upgrading from v2.x, see the Migration Guide and v3.0.0 release notes.
✨ Added¶
- Faceting and animation for multidimensional plots: All plotting methods now support
facet_by
andanimate_by
parameters to create subplot grids and animations from multidimensional data (scenarios, periods, etc.). Plotly only. - Flexible data selection with
select
parameter: Select data using single values, lists, slices, or index arrays for precise control over what gets plotted - Heatmap fill control: New
fill
parameter in heatmap methods controls how missing values are filled after reshaping ('ffill'
or'bfill'
) - Smart line styling for mixed variables: Area plots now automatically style variables containing both positive and negative values with dashed lines, while stacking purely positive or negative variables
♻️ Changed¶
- Breaking: Selection behavior: Plotting methods no longer automatically select the first value for non-time dimensions. Use the
select
parameter for explicit selection of scenarios, periods, or other dimensions - Better error messages: Enhanced error messages when using Matplotlib with multidimensional data, with clearer guidance on dimension requirements and suggestions to use Plotly
- Improved examples: Enhanced
scenario_example.py
with better demonstration of new features - Robust validation: Improved dimension validation in
plot_heatmap()
with clearer error messages
🗑️ Deprecated¶
indexer
parameter: Use the newselect
parameter instead. Theindexer
parameter will be removed in v4.0.0heatmap_timeframes
andheatmap_timesteps_per_frame
parameters: Use the newreshape_time=(timeframes, timesteps_per_frame)
parameter instead in heatmap plotting methodscolor_map
parameter: Use the newcolors
parameter instead in heatmap plotting methods
🐛 Fixed¶
- Fixed cryptic errors when working with empty buses by adding proper validation
- Added early validation for non-existent periods when using linked periods with tuples
📝 Documentation¶
- Redesigned documentation website with custom css
👷 Development¶
- Renamed internal
_apply_indexer_to_data()
to_apply_selection_to_data()
for consistency with new API naming