::: redirect-from
/users/prev_whats_new/whats_new_1.0
:::

# What\'s new in Matplotlib 1.0 (Jul 06, 2010) {#whats-new-1-0}

::: {.contents depth="2"}
Table of Contents
:::

## HTML5/Canvas backend {#whats-new-html5}

Simon Ratcliffe and Ludwig Schwardt have released an
[HTML5/Canvas](https://code.google.com/archive/p/mplh5canvas) backend
for matplotlib. The backend is almost feature complete, and they have
done a lot of work comparing their html5 rendered images with our core
renderer Agg. The backend features client/server interactive navigation
of matplotlib figures in an html5 compliant browser.

## Sophisticated subplot grid layout

Jae-Joon Lee has written `~matplotlib.gridspec`{.interpreted-text
role="mod"}, a new module for doing complex subplot layouts, featuring
row and column spans and more. See `arranging_axes`{.interpreted-text
role="ref"} for a tutorial overview.

![](../../gallery/subplots_axes_and_figures/images/sphx_glr_subplot2grid_001.png){.align-center}

## Easy pythonic subplots

Fernando Perez got tired of all the boilerplate code needed to create a
figure and multiple subplots when using the matplotlib API, and wrote a
`~matplotlib.pyplot.subplots`{.interpreted-text role="func"} helper
function. Basic usage allows you to create the figure and an array of
subplots with numpy indexing (starts with 0). e.g.:

    fig, axarr = plt.subplots(2, 2)
    axarr[0,0].plot([1,2,3])   # upper, left

See `/gallery/subplots_axes_and_figures/subplot`{.interpreted-text
role="doc"} for several code examples.

## Contour fixes and triplot

Ian Thomas has fixed a long-standing bug that has vexed our most
talented developers for years.
`~matplotlib.pyplot.contourf`{.interpreted-text role="func"} now handles
interior masked regions, and the boundaries of line and filled contours
coincide.

Additionally, he has contributed a new module
`~matplotlib.tri`{.interpreted-text role="mod"} and helper function
`~matplotlib.pyplot.triplot`{.interpreted-text role="func"} for creating
and plotting unstructured triangular grids.

![](../../gallery/images_contours_and_fields/images/sphx_glr_triplot_demo_001.png){.align-center}

## multiple calls to show supported

A long standing request is to support multiple calls to
`~matplotlib.pyplot.show`{.interpreted-text role="func"}. This has been
difficult because it is hard to get consistent behavior across operating
systems, user interface toolkits and versions. Eric Firing has done a
lot of work on rationalizing show across backends, with the desired
behavior to make show raise all newly created figures and block
execution until they are closed. Repeated calls to show should raise
newly created figures since the last call. Eric has done a lot of
testing on the user interface toolkits and versions and platforms he has
access to, but it is not possible to test them all, so please report
problems to the [mailing
list](https://mail.python.org/mailman/listinfo/matplotlib-users) and
[bug tracker](https://github.com/matplotlib/matplotlib/issues).

## mplot3d graphs can be embedded in arbitrary axes

You can now place an mplot3d graph into an arbitrary axes location,
supporting mixing of 2D and 3D graphs in the same figure, and/or
multiple 3D graphs in a single figure, using the \"projection\" keyword
argument to add_axes or add_subplot. Thanks Ben Root.

::: plot
from mpl_toolkits.mplot3d.axes3d import get_test_data

fig = plt.figure()

X = np.arange(-5, 5, 0.25) Y = np.arange(-5, 5, 0.25) X, Y =
np.meshgrid(X, Y) R = np.sqrt(X\**2 + Y*\*2) Z = np.sin(R) ax =
fig.add_subplot(1, 2, 1, projection=\'3d\') surf = ax.plot_surface(X, Y,
Z, rstride=1, cstride=1, cmap=\'viridis\', linewidth=0,
antialiased=False) ax.set_zlim3d(-1.01, 1.01)

fig.colorbar(surf, shrink=0.5, aspect=5)

X, Y, Z = get_test_data(0.05) ax = fig.add_subplot(1, 2, 2,
projection=\'3d\') ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)

plt.show()
:::

## tick_params

Eric Firing wrote tick_params, a convenience method for changing the
appearance of ticks and tick labels. See pyplot function
`~matplotlib.pyplot.tick_params`{.interpreted-text role="func"} and
associated Axes method
`~matplotlib.axes.Axes.tick_params`{.interpreted-text role="meth"}.

## Lots of performance and feature enhancements

-   Faster magnification of large images, and the ability to zoom in to
    a single pixel
-   Local installs of documentation work better
-   Improved \"widgets\" \-- mouse grabbing is supported
-   More accurate snapping of lines to pixel boundaries
-   More consistent handling of color, particularly the alpha channel,
    throughout the API

## Much improved software carpentry

The matplotlib trunk is probably in as good a shape as it has ever been,
thanks to improved [software
carpentry](https://software-carpentry.org/). We now have a
[buildbot](https://buildbot.net) which runs a suite of
[nose](http://code.google.com/p/python-nose/) regression tests on every
svn commit, auto-generating a set of images and comparing them against a
set of known-goods, sending emails to developers on failures with a
pixel-by-pixel image comparison. Releases and release bugfixes happen in
branches, allowing active new feature development to happen in the trunk
while keeping the release branches stable. Thanks to Andrew Straw,
Michael Droettboom and other matplotlib developers for the heavy
lifting.

## Bugfix marathon

Eric Firing went on a bug fixing and closing marathon, closing over 100
bugs on the (now-closed) SourceForge bug tracker with help from Jae-Joon
Lee, Michael Droettboom, Christoph Gohlke and Michiel de Hoon.