Multiplatform plotting library based on the Grammar of Graphics
MIT License
Bot releases are hidden (Show)
geom_point()
[#736].gggrid
in Jupyter notebook.theme
: left margin doesn't work for the plot_title
parameter [#1101].Published by VDovidaytis-HORIS 6 months ago
Published by VDovidaytis-HORIS 6 months ago
Parameter dpi
in ggsave()
, to_png()
and to_pdf()
functions [#839].
See example notebook.
Parameter labwidth
in facet_wrap()
and x_labwidth/y_labwidth
in facet_grid()
[LPK-237].
See: example notebook.
Parameter linetype
in element_line()
and element_rect()
in theme()
[LPK-235].
See: example notebook.
Parameter arrow
in geom_spoke()
[#986].
See: example notebook.
Parameter size_unit
in geom_point()
, geom_text()
and geom_label()
.
See: example notebook.
Auto-detection of orientation="y"
in bar-chart etc. [#558].
See: example notebook.
Parameter plot_inset
in theme()
.
See: example notebook.
position
[#1047].vjust
implemented incorrectly [#1051].geom_curve()
[#1053].scale_x_reverse()/scale_y_reverse()
[#1057].scale_x_reverse()/scale_y_reverse()
[#1058].geom_density2d
: the doc missing some 'computed' variables [#1062].linetype
parameter in elementLine()
and elementRect()
[LPK-235].set_theme()
should accept "feature list" [#657].Published by VDovidaytis-HORIS 6 months ago
Published by VDovidaytis-HORIS 8 months ago
coord_polar()
The polar coordinate system is most commonly used for pie charts, but
it can also be used for constructing Spyder or Radar charts using the flat
option.
See: example notebook.
In the theme()
function:
panel_inset
parameter - primarily used for plots with polar coordinates.
See: example notebook.
panel_border_ontop
parameter - enables the drawing of panel border on top of the plot geoms.
panel_grid_ontop, panel_grid_ontop_x, panel_grid_ontop_y
parameters - enable the drawing of grid lines on top of the plot geoms.
geom_curve()
See: example notebook.
[UNIQUE] Visualizing graph-like data with geom_segment()
and geom_curve()
.
Aesthetics size_start, size_end, stroke_start
and stroke_end
enable better alignment of
segments/curves with nodes of the graph by considering the size of the nodes.
The spacer
parameter allows for additional manual fine-tuning.
See:
alpha_stroke
parameter in geom_label()
to enable the applying of alpha
to color
[#1029].
See: example notebook.
Showing plots in external browser
The LetsPlot.setup_show_ext()
directive allows plots to be displayed in an external browser window.
geom_image()
is removed. Please use geom_imshow()
instead.axis_ontop
in theme()
is now True
by default.geomCrossbar()
optional [LPK-233].Published by VDovidaytis-HORIS 8 months ago
Published by VDovidaytis-HORIS 8 months ago
Published by VDovidaytis-HORIS 10 months ago
Support for Categoricals
:
pandas.Categorical
data type [#914].levels
parameter in as_discrete()
function [#931].See: example notebook.
Support for superscript for numbers in scientific notation [#743].
Warning!
Do NOT(!) use
exponent_format='pow'
if you are planning to export plot to a raster format (PNG,PDF).The
CairoSVG
library (which is under the hood of ourggsave()
function) does not handretspan
element properly end breaks superscript notation when transforming SVG to PNG/PDF.More details: https://github.com/Kozea/CairoSVG/issues/317
See: example notebook.
Support exporting plot to a file-like object.
Convenience methods: to_svg()
, to_html()
, to_png()
, to_pdf()
[#885], [#590].
See: example notebook.
Sharing of X,Y-scale limits between subplots in gggrid()
[#718].
See: example notebook.
geom_spoke()
[#738].
See: example notebook.
scale_x_log2()
, scale_y_log2()
[#922].
High-contrast tileset "BW" for geom_livemap()
.
See: example notebook.
New variables computed by 'count'
and 'count2d'
statistics: '..sumprop..'
, '..sumpct..'
[#936].
See: example notebook.
Support using dictionaries for breaks/labels/values customization in scale_xxx()
functions [#169], [#882].
See: example notebook.
The lablim
parameter in scale_xxx()
functions [#939, #946].
See: example notebook.
label_text
parameter in theme()
for annotation text settings [#930].
See: example notebook.
NumberFormat: new flag ~
to trim trailing zeros.
[BREAKING] Function margin()
is deprecated and will be removed in future releases.
Please replace all existing usages, i.e. theme(plot_margin=margin(..))
and element_text(margin=margin(..))
with a list or with just a number:
See: example notebook.
Upgraded Apache Batik to version 1.17 [#887]
scale_continuous()
fails with non-color aesthetics [#953].g
format doesn't use e-notation for small numbers [#965].geom_segment()
with position adjustment [#963].Published by VDovidaytis-HORIS 10 months ago
Published by VDovidaytis-HORIS 12 months ago
Annotations in Barchart
See: example notebook.
Common theme support in subplots (i.e. gggrid()
) [LPK-#197].
See: example notebook.
HCL
and CIELAB
color space for hue color scale and gradient color scales [#876].
See: example notebook.
New scale transformations: 'log2'
and 'symlog'
.
See: example notebook.
plot_margin
parameter in theme()
[#856].
See: example notebook.
Dual orientation for geometries:
geom_errorbar()
geom_crossbar()
geom_pointrange()
geom_linerange()
geom_ribbon()
See: example notebook.
Python 3.12 support [#907].
stat_summary()
and stat_summary_bin
no longer supports computing of additional variables specified in mappings.geom_crossbar
: an error occurs if the mapped values of aesthetics are not populated [#886].plot_margin
parameter in theme()
[#856].element_blank()
has no effect on plot title/subtitle/caption in theme()
[#913].Published by VDovidaytis-HORIS 12 months ago
Published by VDovidaytis-HORIS about 1 year ago
plot_message
parameter in theme(...)
[#863].
See: example notebook.
Add geom_count()
/stat_sum()
[#821].
See: example notebook.
If layer transparency is set via the alpha-channel in the colors RGBA specification and via the alpha
aesthetic,
then the alpha
aesthetic overrides the alpha-channel in the color. Previousely it was the opposite.
geom_pie()
defaults:
stroke_side='both'
(was stroke_side='outer'
).stroke_side = 'both'/'inner'
(was created automatically).geom_bar()
now has solid outline color by default (was transparent).
geom_tile()
, geom_bin2d()
now have solid outline color by default (was transparent).
size
is 0 (i.e. tiles outline initially is not visible).geom_tile()
, geom_bin2d()
: the alpha
aesthetic is applied to the tiles outline.scale_x_datetime()
: error building plot for early dates [#346].geom_livemap()
: theme/flavor plot background is not shown [#857].geom_livemap()
: in AWT dragging a map in a facet moves maps in all facets.geom_livemap()
: support rectangle 'linetype' [#307].theme_void()
+ flavor_xxx()
: no expected plot background [#858].paint_a/paint_b/paint_c
[#867].Published by VDovidaytis-HORIS about 1 year ago
Flavor-aware colors: pen, brush and paper
geom
parameter allows redefinition of "geom colors": theme(geom=element_geom(pen, brush,paper))
.See: example notebook.
stat_summary()
:
example notebook.
stat_summary_bin()
:
example notebook.
stat_ecdf()
:
example notebook.
geom_function()
:
example notebook.
theme_void()
[#830] :
example notebook.
"sum"
statistic [#821]:
example notebook.
"boxplot_outlier"
statistic: example notebook.
Support for variadic line width and/or color in geom_line()
and geom_path()
[#313].
In tooltip customization API:
disable_splitting()
function [LPK-189].
In geom_pie()
:
stroke
and color
aesthetics - the width and color of pie sector arcs.stroke_side
parameter - which arcs to show (inner, outer, both).spacer_width
and spacer_color
parameters - lines between sectors.See: example notebook.
size_unit
parameter : example notebook.The default qualitative color palette is now Color Brewer "Set1" (was "Set2")
Geometries default colors are now flavor-dependent: example notebook.
Geometries default size/line-width is now slightly bigger.
Point size is adjusted to match the width of a line of the same "size".
[BREAKING] geom_pie()
no longer supports parameter stroke_color
.
[BREAKING] geom_boxplot()
no longer support parameter sampling
.
[BREAKING] geom_pointrange()
: size
aesthetic shouldn't affect line width [#751]:
linewidth
aesthetic is used for line width, size
- for mid-point size only.
geom_boxplot()
: size
and stroke
parameters now affect outlier shapes.
[BREAKING, only affects users of Lets-Plot Kotlin API]
The entire project has undergone package refactoring.
As a result of package names changed, Lets-Plot v4.0.0 is partially incompatible
with Lets-Plot Kotlin API versions 4.4.1 and earlier.
ggsave()
doesn't save geom_raster() layer to a file [#778].ggsave()
: saving geomImshow() to SVG produces fuzzy picture [LPK-188].ggsave()
: saving geomImshow() to raster format produces fuzzy picture.geom_crossbar()
aesthetics take middle
argument instead of y
[#804].geom_boxplot()
doesn't apply alpha to outliers [#754].geom_boxplot()
outliers do not show tooltips.geom_step()
no tooltips.geom_step()
: toggle the behavior of the direction
parameter when the orientation is changed.geom_livemap()
: memory leak when re-run cells without reloading a page.geom_ribbon()
: not all tooltips are shown on a multi-layer plot [#847].Published by VDovidaytis-HORIS about 1 year ago
Published by VDovidaytis-HORIS over 1 year ago
geom_lollipop()
.
See: example notebook.
Aesthetic stroke
[#320]
and its scales scale_stroke()
, scale_stroke_identity()
.
See: example notebook.
Aesthetic linewidth
(for geom_lollipop()
) and its scales scale_linewidth()
, scale_linewidth_identity()
.
See: example notebook.
The 'newline' character (\n
) now works as line break
in legend
text ([#726])
See: example notebook.
Horizontal error bars and vertical "dodge" ([#735]).
See: example notebook.
Colorbar in geom_imshow()
. Parameters show_legend
and color_by
[#717].
[BREAKING] geom_dotplot()
and geom_ydotplot()
no longer support parameter stat
.
Position adjustment settings:
width, height
parameters of geom_jitter()
have priority over the width, height
parametersposition_jitter()
function;nudge_x, nudge_y
parameters of geom_text(), geom_label()
have priority over x, y
parametersposition_nudge()
function.geom_text(), geom_label()
use stat='identity'
by default.
JVM/Batik: improved "paint manager" which now has better performance and fixes issues with artifacts that could appear beyond the plot component.
geom_imshow()
fail with an error: "The attribute "xlink:href" of the element is required"geom_imshow()
geom_raster()
[LPK-175].geom_segment()
doesn't take into account the alpha [#748].geom_density2d
: Internal error with None values in data [#702]...quantile..
is mapped to geom aesthetic.as_discrete()
[#653]."^size"
, where size
aesthetic is specified with a number).ggmarginal
[#681].facet_grid
: Internal error [#699].Published by VDovidaytis-HORIS over 1 year ago
Published by VDovidaytis-HORIS over 1 year ago
gggrid()
function.
See: example notebook.
joint_plot()
See: example notebook.
Export to PNG files in ggsave()
.
Note: export to PNG file requires the CairoSVG library.
See: example notebook.
Axis position
parameter in position scales scale_x_*(), scale_y_*()
.
See: example notebook.
angle
parameter in element_text()
in theme()
.
See: example notebook.
Additional "color" aesthetics: paint_a, paint_b, paint_c
.
These aesthetics are flexible and can be used as either "color" or "fill" as needed. See Multiple Color Scales demo.
Also added a set of related "color scale" functions with the "aesthetic" parameter for configuring of additional color scales.
See New "Scale" Functions demo.
Drawing quantile lines and filling quantile areas in geom_violin()
and geom_density()
See: example notebook.
geodesic
parameter for geom_segment()
and geom_path()
.
See: example notebook.
density2d
and density2df
geometry types in residual_plot()
.
The MinGW
toolchain is no longer required for installing of Lets-Plot
on Windows
.
[BREAKING] geom_violin()
no longer supports parameter draw_quantiles
. Use new quantile_lines
and quantiles
parameters as needed.
[BREAKING] stack
and fill
position adjustments now stack objects on top of each other only if these objects belong to different groups.
If necessary, use mode="all""
in position_stack()
or position_fill()
to stack objects regardless of their group.
See: example notebook.
..quantile..
aesthetic change [#658].color_by
parameter of the residual_plot()
should group the data points [#662].position='stack'
[#673].Published by VDovidaytis-HORIS over 1 year ago
Published by VDovidaytis-HORIS almost 2 years ago
Python wheel for Python 3.11.
residual_plot()
.
See: example notebook.
geom_area_ridges()
.
See: example notebook.
geom_pie()
.
See: example notebook.
Annotations for pie chart:
See: example notebook.
New variables computed by 'count'
and 'count2d'
statistics: '..sum..'
, '..prop..'
, '..proppct..'
.
See: example notebook.
Maps:
"Spatial pies" on interactive maps.
See: example notebook.
The flat
parameter for geom_path()
and geom_segment()
(replaces the retired geodesic
parameter in geom_livemap
).
See: example notebook.
Static maps:
The value "provided" for use_crs
parameter.
See: example notebook.
geom_imshow()
:
Improved performance by orders of magnitude.
Transparency of NaN
values in grayscale images [#631].
See: example notebook.
alpha
parameter [#630].
See: example notebook.
tails_cutoff
parameter in geom_violin()
See: example notebook.
geom_livemap()
itself no longer draws geometries, so the following options are no longer supported:symbol
, data
, mapping
, map
, map_join
, ontop
, stat
, position
, show_legend
, sampling
, tooltips
.geom_point()
and geom_pie()
geometry layers.Published by VDovidaytis-HORIS almost 2 years ago