Releases: has2k1/plotnine
v0.13.1
v0.13.0
API Changes
-
Requires python >= 3.9
-
Using the
print
orrepr
functions to draw and show the plot has been deprecated. Use ggplot.show(). -
The name of the calculated aesthetic of
stat_function
changed fromy
tofx
. -
stat_ecdf
has gained thepad
parameter. The default is set toTrue
, which pads the domain with-inf
andinf
so that the ECDF does not have discontinuities at the extremes. To get the behaviour, setpad
toFalse
. (#725) -
Removed the environment parameter from
ggplot
. -
When a ggplot object is the last in a jupyter cell, the output image will not be followed by string meta information about the figure/image.
This will happen even if the backend is set to an interactive one.
If you set the backend to an interactive one, use
show
to draw the plot. -
The default horizontal alignment for the plot title is center if it there is no subtitle. When there is a subtitle, the default is to have both aligned to the left.
-
Some parameters that control the look and feel of
guide_colorbar
andguide_legend
have been removed. For their place, thetheme
parameter has been introduced and it gives better control of the look and feel. -
Themeables
legend_entry_spacing
,legend_entry_spacing_x
andlegend_entry_spacing_y
have been renamed tolegend_key_spacing
,legend_key_spacing_x
andlegend_key_spacing_y
respectively -
facet_grid
now accepts two parameters,rows
andcols
, to specify the variables along the two dimensions of the panels.The previous way of using a single parameter will still work if it is a string. For cases where the value was a list, e.g.
facet_grid(facets=["col1", "col2"])
can be rewritten as any one of;
facet_grid("col1", "col2") facet_grid(["col1"], ["col2"]) facet_grid(rows="col1", cols="col2") facet_grid(rows=["col1"], cols=["col2"])
-
The
facets
parameter infacet_wrap
has also changed to a more straight forward specification for the column variables. It expects a single string or a list/tuple of strings. (#545)However, the R-style formula strings are still silently accepted.
New
-
Added symmetric logarithm transformation scales
scale_x_symlog
andscale_y_symlog
-
Gained themeables
to set the plot margin on each side independently.
-
Gained themeables
axis_ticks_length_major_x
axis_ticks_length_major_y
axis_ticks_length_minor_x
axis_ticks_length_minor_y
to control the x & y axis ticks length.
-
Gained themeables
to control the x & y tick padding.
-
Some parameters in
element_text
can now accept lists/tuples to set the values on individual text objects. (#724) -
Gained the option
figure_format
to set the format of the inline figures in an interactive session.
e.g.from plotnine.options import set_option set_option("figure_format", "svg")
will output all subsequent figures in svg format.
-
Improved support for customizing guides/legends.
-
You can now add a frame to the colobar
-
You can now apply themes to individual guides, e.g.
+ guides(color=guide_colorbar(theme=theme_xkcd()))
or
+ guides(color=guide_legend(theme=theme_minimal())
-
You can now place legends at more than one position around the panels. e.g.
+ guides( color=guide_colorbar(position="left"), fill=guide_legend(position="bottom"), size=guide_legend(position="bottom") )
Puts the
fill
andsize
guides at the bottom, and thecolor
guide on the left. -
You can easily justify the legend along the four edges of the space around the panel area.
-
You can now place the legend inside the panels with easily control its location.
-
-
The
space
parameter offacet_grid
now responds to the valuesfree
,free_x
andfree_y
to have panels whose relative width and/or height depends on the data range. (#545)
Bug Fixes
-
Fixed handling of minor breaks in
scale_continuous
to accept numpy arrays and when the scale has a transform, that the minor breaks are supplied in user space and not transform space. Just like the major breaks. (#685) -
Fixed theming of axis_ticks with the size parameter. (#703)
-
Fixed space handling around
axis_label
,axis_text
andaxis_ticks
when the ticks are turned off. -
Fixed bug in
geom_path
where the lineend parameter was ignored. (#727) -
Fixed bug where
theme(legend_background=element_blank())
messed up the position of the legend, instead of only removing the background. -
Fixed using
facet_grid
with a column namedkey
. (#734) -
Fixed using legend when using an identity scale and reordering the breaks. (#735)
-
Fixed drawing the upper outline of
geom_ribbon
. (#728) -
Fixed issue where the gridlines overlap the panel border. (#638)
Enhancements
v0.12.4
v0.12.3
v0.12.2
v0.12.1
(2023-05-09)
New Features
-
A layout manager. Now you do not have to adjust spacing parameters to prevent objects around the panels from overlapping. Specifically, you can:
- Set the legend position to "top", "left" or "bottom"
- Use a large or multiline plot title
- Use a large or multiline plot caption
- Use facet_wrap with
scales="free"
scales="free_x"
or `scales="free_y"
You can now also align the plot_title, axis_title_x, axis_title_y and plot_caption with respect to the panels. Set these to "left", "right" & "center" for the horizontal flowing text. And "top", "right" & "center" for the vertical flowing text.
Also, the size of the figure is exactly determined by the theme setting. For example, this:
theme(figure_size=(8, 6), dpi=100)
will create an 800px x 600px image.
-
You can create a
subtitle
using labs and style it using theplot_subtitle
parameter to theme.
theme(plot_subtitle=element_text(size=8))
Enhancements
-
ggplot object gained a new method save_helper(). It gives you access to the matplotlib figure that will be saved to file.
-
When plotting with an ipython interactive backend (e.g. in a jupyter notebook). The default image output is retina. You do not need to run this command.
%config InlineBackend.figure_format = "retina"
Plotnine still respects any values set the user.
-
In an interactive setting, after drawing an image. The size of the figure (in pixels) is printed e.g.
<Figure Size: (640 x 480)>
. Previously, something like<ggplot: (336175301)>
was printed.
API Changes
__add__()
and__iadd__()
now accept the same types of objects. In this change__iadd__()
has gained the ability to accept a list of objects.- draw() no longer accepts the argument
return_ggplot
and the return value is always a matplolib figure. - Themeables
strip_margin,
strip_margin_x
andstrip_margin_y
have been renamed to strip_align(), strip_align_x() strip_align_y() repectively. subplots_adjust
has been deprecated. You no longer need to usetheme(subplots_adjust={"right": 0.85})
and the like to make space for the legend or text around the panels. In the future, this will through an error.- Changed default font-family (san-serif) from DejaVu Sans to Helvetica.
Bug Fixes
- Fixed bug where a discrete position scale failed when mapping an empty variable. (#647)
- Fixed bug where facet_grid with a datetime column run into an exception. (#629)
- Fixed bug where geom_violin with facetting and "scales = free" did not work. (#655)
- Fixed bug in position_dodge2 to work with preserve="single" for geom_rect and any other geoms that accept a min-max range along the x-axis.
- Fixed legend for geom_point to accurately display transparent fill colors that have been manually set. (#665)
- Fix issue where infinite limits for the x or y scales lead to an exception. (#664)
- Fixed geom_text and geom_label when used with string formatting so that missing values are removed. (#651)
v0.10.1
v0.10.0
v0.9.0
v0.8.0
API Changes
- How you map to calculated aesthetics has changed. Use the
~plotnine.aes.after_stat
function. The old methods'stat(name)'
and'..name..'
have been deprecated.
New Features
- You can now map to aesthetics at three different stages. See
~plotnine.aes.aes
,~plotnine.aes.after_stat
,
~plotnine.aes.after_scale
and~plotnine.aes.stage
. ~plotnine.geoms.geom_violin
gained the a new parameterstyle
with which you can draw half violin (density curve on one side and
flat on the other).- Added
~plotnine.geoms.geom_raster
. geoms
gained new parameterraster
for the
~plotnine.layer.Layer
. You can use it to rasterize any layer when
the resulting plot is of vector format e.g.pdf
.
Bug Fixes
- Fixed issue where some plots with a colorbar would fail for specific
themes. (424
) - Fixed
~plotnine.geoms.geom_map
to plotMultiLineString
geom
types. - Fixed
~plotnine.geoms.geom_text
to allow any order ofmapping
anddata
positional arguments. - Fixed bug were the plotted image may have ignored theming that
relied on some Matplotlib rcParams. (451
) - Fixed the
weight
aesthetic in~plotnine.geoms.geom_boxplot
,
previously ignored it is now recognised. (438
) - Fixed
~plotnine.geoms.annotation_logticks
and
~plotnine.geoms.annotation_stripes
to work without global data and
aesthetics. (469
) - Fix
~plotnine.scales.scale_shape_discrete
when print many unfilled
shapes not to assign the same shapes to more than one group. (473
) - Fixed bug in
~plotnine.stats.stat_ellipse
where the center of the
ellipse assuming a multivariate t-distribution was incorrectly
calculated. (493
) - Fixed calculation of
ndensity
in~plotnine.stats.stat_bin
.
(494
)
Enhancements
-
Manual scales now match the values of the breaks if the breaks are
given. (445
) -
Using
print
to show a ggplot object will not show the hash
(<ggplot: ...>
) anymore. There is now a difference between
repr(p)
andstr(p)
. (453
) -
Added option to for the
base_family
of a theme, now you can set it
once with and have it be applied to all themes. (436
)from plotnine.options import set_option set_option('base_family', 'Comic Sans MS')
-
You can now add
None
to a ggplot, doing so returns a copy of the
the ggplot object. (474
) -
Better handling of multiline facet labels. (
484
)