- Fix incompatibility with jsonschema < 4.5 which got introduced in Altair 4.2.1 (#2860).
- Disable uri-reference format check in jsonsschema (#2771).
- Replace
iteritems
withitems
due to pandas deprecation (#2683).
- Add deprecation and removal warnings for Vega-Lite v3 wrappers and Vega v5 wrappers (#2843).
- Update Vega-Lite from version 4.8.1 to version 4.17.0; see Vega-Lite Release Notes.
- Pie charts are now supported through the use of
mark_arc
. (Examples: eg.gallery_pie_chart
andgallery_radial_chart
.) - Support for the
datum
encoding specifications from Vega-Lite; see Vega-Lite Datum Definition. (Examples:gallery_line_chart_with_datum
andgallery_line_chart_with_color_datum
.) angle
encoding can now be used to control point styles (Example:gallery_wind_vector_map
)- Support for serialising pandas nullable data types for float data (#2399).
- Automatically create an empty data object when
Chart
is called without a data parameter (#2515). - Allow the use of pathlib Paths when saving charts (#2355).
- Support deepcopy for charts (#2403).
- Fix
to_dict()
for nested selections (#2120). - Fix item access for expressions (#2099).
- Minimum Python version is now 3.6
- Update Vega-Lite to version 4.8.1; many new features and bug fixes from Vega-Lite versions 4.1 through 4.8; see Vega-Lite Release Notes.
strokeDash
encoding can now be used to control line styles (Example: Multi Series Line Chart)chart.save()
now relies on altair_saver for more flexibility (#1943).- New
chart.show()
method replaceschart.serve()
, and relies on altair_viewer to allow offline viewing of charts (#1988).
- Support Python 3.8 (#1958)
- Support multiple views in JupyterLab (#1986)
- Support numpy types within specifications (#1914)
- Support pandas nullable ints and string types (#1924)
- Update Vega-Lite version to 4.0.2
- Fix issue with duplicate chart divs in HTML renderer (#1888)
Version 4.0.0 is based on Vega-Lite version 4.0, which you can read about at https://github.com/vega/vega-lite/releases/tag/v4.0.0.
It is the first version of Altair to drop Python 2 compatibility, and is tested on Python 3.5 and newer.
- Support for interactive legends: (see
gallery_interactive_legend
) - Responsive chart width and height: (see
customization-chart-size
) - Lookup transform responsive to selections: (see
user-guide-lookup-transform
) - Bins responsive to selections: (see
gallery_histogram_responsive
) - New Regression transform: (see
user-guide-regression-transform
) - New LOESS transform: (see
user-guide-loess-transform
) - New density transform: (see
user-guide-density-transform
) - New pivot transform: (see
user-guide-pivot-transform
) - Image mark (see
user-guide-image-mark
) New default
html
renderer, directly compatible with Jupyter Notebook and JupyterLab without the need for frontend extensions, as well as tools like nbviewer and nbconvert, and related notebook environments such as Zeppelin, Colab, Kaggle Kernels, and DataBricks. To enable the old default renderer, use:alt.renderers.enable('mimetype')
- Support per-corner radius for bar marks: (see
gallery_bar_rounded
)
Sort-by-field can now use the field name directly. So instead of:
alt.Y('y:Q', sort=alt.EncodingSortField('x', order='descending'))
you can now use:
alt.Y('y:Q', sort="-x")
- The
rangeStep
argument toScale
andChart.configure_scale
is deprecated. instead, usechart.properties(width={"step": rangeStep})
orchart.configure_view(step=rangeStep)
. align
,center
,spacing
, andcolumns
are no longer valid chart properties, but are moved to the encoding classes to which they refer.
Last release to support Python 2
- Add inheritance structure to low-level schema classes (#1803)
- Add
html
renderer which works across frontends (#1793) - Support Python 3.8 (#1740, #1781)
- Add
:G
shorthand for geojson type (#1714) - Add data generator interface:
alt.sequence
,alt.graticule
,alt.sphere()
(#1667, #1687) - Support geographic data sources via
__geo_interface__
(#1664)
- Support
pickle
andcopy.deepcopy
for chart objects (#1805) - Fix bug when specifying
count()
withintransform_joinaggregate()
(#1751) - Fix
LayerChart.add_selection
(#1794) - Fix arguments to
project()
method (#1717) - Fix composition of multiple selections (#1707)
Upgraded to Vega-Lite version 3.4 (See Vega-Lite 3.4 Release Notes).
Following are changes to Altair in addition to those that came with VL 3.4:
- Selector values can be used directly in expressions (#1599)
- Top-level chart repr is now truncated to improve readability of error messages (#1572)
- top-level
add_selection
methods now delegate to sub-charts. Previously they produced invalid charts (#1607) - Unsupported
mark_*()
methods removed from LayerChart (#1607) - New encoding channels are properly parsed (#1597)
- Data context is propagated when encodings are specified as lists (#1587)
alt.LayerChart
no longer hasmark_*()
methods, because they never produced valid chart specifications) (#1607)
Update includes full compatibility with version 3.3 of Vega-Lite.
- Added support for vega themes via
alt.themes.enable(theme_name)
(#1539) - Added an
alt.renderers.disable_max_rows()
method for disabling the maximum rows check (#1538) - Improved user-facing warnings/errors around layering and faceting (#1535).
data
argument is now properly handled byChart.properties
(#1525)- Compound charts (layer, concat, hconcat, vconcat) now move data to the top level by default. In particular, this means that the
facet()
method can now be called directly on a layered chart without having to change how data is specified. (#1521) alt.LayerChart
now supportsmark_*()
methods. If a layer specifies a mark at the top level, all child charts will inherit it (unless they override it explicitly).alt.Chart.facet()
now handles wrapped facets; for example:python chart.facet('column_name', columns=5)
Seealtair/examples/us_population_over_time_facet.py
for a more complete example.
- Make
chart.serve()
andchart.save()
respect the data transformer setting (#1538) - Fixed a deserialization bug for certain chart specs in schemapi (#1543)
alt.Chart.facet()
now accepts a wrapped facet encoding as a first positional argument, rather than a row encoding. The following are examples of old invocations, and the equivalent new invocations:chart.facet(row='col1', column='col2')
: unchangedchart.facet('col1', 'col2')
: change tochart.facet(row='col1', column='col2')
chart.facet('col1')
: change tochart.facet(row='col1')
In each case, the new invocations are compatible back to Altair 2.X.
- Several of the encoding channels added in 3.0 have had their capitalization corrected to better match the names used in the schema:
alt.Fillopacity
->alt.FillOpacity
alt.Strokeopacity
->alt.StrokeOpacity
alt.Strokewidth
->alt.StrokeWidth
alt.Xerror
->alt.XError
alt.Xerror2
->alt.XError2
alt.Yerror
->alt.YError
alt.Yerror2
->alt.YError2
Fix version info bug for HTML output and Colab & Kaggle renderers.
Update to Vega-Lite 3.2 and Vega 5.3 & support all new features. See https://github.com/vega/vega-lite/releases/tag/v3.0.0 for Vega-Lite feature lists.
- new compound marks:
mark_boxplot()
,mark_errorband()
,mark_errorbar()
- new transforms:
transform_impute()
,transform_joinaggregate()
,transform_flatten()
transform_fold()
,transform_sample()
,transform_stack()
- new
facet
encoding that is similar to therow
andcolumn
encoding, but allows for wrapped facets - new
alt.concat()
function that is similar toalt.hconcat
andalt.vconcat
, but allows for more general wrapped concatenation - new
columns
keyword that allows wrapped faceting, repeating, and concatenation. - many, many bug fixes
- tooltips can now be automatically populated using the
tooltip
mark configuration. - ability to specify initial conditions for selections
- Several documentation cleanups & new examples
- Fix incompatibility with pandas version 0.24 (#1315)
Includes many reworked examples in the example gallery.
- Better errors for non-string column names, as well as automatic conversion of
pandas.RangeIndex
columns to strings (#1107) - Renderers now have set_embed_options() method (#1203)
- Added kaggle renderer & more HTML output options (#1123)
- fix typing requirement in Python 3.6+ (#1185)
- Added support & CI testing for Python 3.7 (#1008)
- Selection predicates now recognize all valid entries (#1143)
- Python 2 support for
chart.save()
(#1134)
- fix missing JSON resource in
altair.vega.v4
(#1097)
- appropriate handling of InlineData in dataset consolidation (#1092)
- fix admonition formatting in documentation page (#1094)
- better handling of datetimes and timezones (#1053)
- all inline datasets are now converted to named datasets and stored at the top level of the chart. This behavior can be disabled by setting
alt.data_transformers.consolidate_datasets = False
(#951 & #1046) - more streamlined shorthand syntax for window transforms (#957)
alt.SortField
renamed toalt.EncodingSortField
andalt.WindowSortField
renamed toalt.SortField
(#3741)
- Fixed serialization of logical operands on selections within
transform_filter()
: (#1075) - Fixed sphinx issue which embedded chart specs twice (#1088)
- Avoid Selenium import until it is actually needed (#982)
- add a
scale_factor
argument tochart.save()
to allow the size/resolution of saved figures to be adjusted. (#918) - add an
add_selection()
method to add selections to charts (#832) - add
chart.serve()
andchart.display()
methods for more flexibility in displaying charts (#831) - allow multiple fields to be passed to encodings such as
tooltip
anddetail
(#830) - make
timeUnit
specifications more succinct, by parsing them in a manner similar to aggregates (#866) - make
to_json()
andto_csv()
have deterministic filenames, so in json mode a single datasets will lead to a single on-disk serialization (#862)
- make
data
the first argument for all compound chart types to match the semantics ofalt.Chart
(this includesalt.FacetChart
,alt.LayerChart
,alt.RepeatChart
,alt.VConcatChart
, andalt.HConcatChart
) (#895). - update vega-lite to version 2.4.3 (#836)
- Only API change is internal:
alt.MarkProperties
is nowalt.MarkConfig
- update vega to v3.3 & vega-embed to v3.11 in html output & colab renderer (#838)
- Complete rewrite of Altair, focused on supporting Vega-Lite 2.X
This version of Altair is based on Vega-Lite 1.2.1.
- Support for JupyterLab/nteract through MIME based rendering. Enable this by calling
enable_mime_rendering()
before rendering visualizations (#216). - Change default import in all code and docs to
import altair as alt
- Check for missing and misspelled column names upon exporting or rendering, and raise
FieldError
(#399) if any problems are found. This can be disabled by settingChart.validated_columns=False
. - Raise
MaxRowsExceeded
if the number of rows in the dataset is larger thanChart.max_rows
to guard against sending large datasets to the browser. - Move the Vega-Lite 1.x api into
altair.v1
to make it easier for us to migrate to Vega-Lite 2.x and continue to support 1.x. No import change are needed asaltair.v1
is aliased toaltair
in this releasealtair.v1
(#377). - Moved the example notebooks into a separate repository (https://github.com/altair-viz/altair\_notebooks) that has Binder support (#391).
- Add
$schema
to top-level JSON spec (#370). - Minor documentation revisions.
- Make sure default mark is a point (#344).
- Update to Vega-Lite 1.2 and make all its enhancements available to Altair
- Add
Chart.serve
method (#197) - Add
altair.expr
machinery to specify transformations and filterings (#215) - Add
Chart.savechart
method, which can output JSON, HTML, and (if Node is installed) PNG and SVG. See https://altair-viz.github.io/documentation/displaying.html (#213)
- Countless minor bug fixes
- Update to Vega-Lite 1.2.1 and add its supported features
- Create website: http://altair-viz.github.io/
- Set up Travis to run conda & pip; and to build documentation
- Initial release of Altair