These are just starting points. Your own ideas are most welcome.
Any questions or comments should be asked on matplotlib-devel list.
Matplotlib currently has a very simple method to layout the components of a figure (axes, titles, tick labels). This unfortunately makes it very common for text to run together or outside of the image. A proper constraint-based layout engine should be able to automatically prevent such artists from running together, as well as solve other layout difficulties such as twinned axes and colorbars.
Intensity | Involves | Mentors |
---|---|---|
Advanced | Python, Constraint Solving | [@mdboom][] [@tacaswell][] |
This work will likely be based on an existing constraint-solving library, such as Cassowary as implemented by kiwi. Likely this would be implemented in two phases: (1) the implementation of existing layout abilities in terms of constraints, accessible through a new API, and (2) exposing this new implementation through the existing APIs.
This project involves experience with Python and understanding of linear constraint solvers. Computer graphics concepts, particularly text layout, would also be an asset.
When images are rendered to the canvas, we use >4x the input size in internal temporary arrays. In some cases, with masked images or with values out of the normalization range, this is un-avoidable, but in many cases we could make do with only one full size intermediate copy. See #6952 for more details.
Intensity | Involves | Mentors |
---|---|---|
Intermediate | Python, | [@tacaswell][] |
One approach at this would be add some fast-paths through the existing code.
Extending the current interpolation system to include dedicated (external) resampling code, for example datashader. See bokeh/datashader#200 for a proof of concept.
Folding something like mpl-modest-image directly into Matplotlib would also be in scope for this project.
This task will be majority in Python and requires a working knowledge of NumPy. Domain experience with large images is a plus.
This work may require the ability to read and understand templated C++ and Matplotlib's binding of Agg to Python.
This work may require API design (for which domain expertise will be beneficial) and interaction with external libraries.
All of the color mapping in Matplotlib is currently derived from
ScalerMappable
which as the name suggests maps scalers from R^1 -> R^4
RGBA color space. It is common to want to map a vector to
colors, for example to control the alpha based on a second value in a
scatter plot or to show the orientation of a field.
Intensity | Involves | Mentors |
---|---|---|
Intermediate | Python, | [@tacaswell][@story645] |
This will require developing a significant new set of classes for
Matplotlib, possibly parallel to possibly extending the existing 1D
normalization and color mapping classes. These classes will need to be exposed to
users either as new API or extending the existing ScalerMappable
API.
In addition, a 2D color bar would need to be implemented and suitable color maps will need to be developed.
Competence with Python and OO design is required. Experience with the current normalization and color mapping tools in Matplotlib would be beneficial.
Matplotlib's existing text layout engine is appropriate only for standard English-like left-to-right languages. In order to open Matplotlib usage up to a broader international audience, it would be nice to wrap an existing internationalized text layout engine, such as Pango/Harfbuzz.
Intensity | Involves | Mentors |
---|---|---|
Advanced | Python, C, low-level font details | [][] |
In order to make this work possible, we first need to abstract out the existing text layout engine so it can be interchanged with other algorithms.
More details of this project are described here. Some of the initial tasks in that MEP are already implemented in PR 5414.
This task may involve writing Python wrappers for C libraries in the Python/C API if the existing wrappers are found to be insufficient.
Deep understanding of or willingness to learn font technologies, the Unicode Standard and text layout algorithms is required.
Categorical color support in Matplotlib consists of the user manually mapping their categorical data to numbers and creating some hacks to plot their data accordingly. To more broadly support categorical color, the tasks may include:
- Modifying the units and plots interface so that heatmaps and other
scalerMappables
support units. - Creating a CategoricalNorm and CategoricalCmap
- Modifying legends to work with
scalermappbles
- Adding support for natively plotting arrays of colornames
Intensity | Involves | Mentors |
---|---|---|
Intermediate | Python, Data science | [@tacaswell][@story645] |
More broadly, this task will involve designing new user-friendly APIs to more automatically deal with certain types of data.
This work will be done in Python.
Many of Matplotlib's higher-level plotting methods, such as hist
(histogram), return lists of artists that it draws. Unfortunately,
this loses the connection to the original data, or any relationships
that those artists may have. We would like to refactor these methods
to return "compound artist" classes that would retain the original
data and have methods to further modify the artists as a whole in
meaningful ways. In addition to improving the API for Matplotlib
users, this opens up the possibility of better data exchange with
other tools.
Intensity | Involves | Mentors |
---|---|---|
Intermediate | Python | [@tacaswell][] |
Some of this work has already been begun in #3944.
This work should be 100% in Python. Understanding of duck-typing and operator overloading in Python is a must.
Matplotlib's documentation has grown organically over time and is now extreme large, disorganized, and still does not cover the full functionality of the library. Current best practices favor an overview->filter->details on demand approach to UI, but unfortunately this tool does not yet exist in the sphinx ecosystem that Matplotlib uses to build the documentation. This task would involve making the documentation more user-accessible through some combination of:
-
Understanding how sphinx-gallery generates documentation
-
Building album support in sphinx-gallery
-
Sorting out what meta-data to capture and cross link, develop tools to do this automatically.
-
Begin reorganizing the Matplotlib gallery and examples albums, develop documentation and guide lines on how to sort examples into albums
Intensity | Involves | Mentors |
---|---|---|
Medium | Python, Sphinx, javascript, html | [][@tacaswell] |
This task will involve working closely with our sphinx-based documentation production system and writing and adapting extensions.
Writing tools and scripts in Python to automate repetitive tasks will also be required.
A contributor to this project should have broad experience using Matplotlib and Python. A deep understanding of Sphinx, including writing extensions, would also be a major asset.