Skip to main content

Functions to check Matplotlib plot outputs

Project description

MatPlotCheck

PyPI codecov Documentation DOI

A package for testing different types of matplotlib plots including:

  • basic matplotlib plots
  • geopandas spatial vector plots
  • raster plots
  • time series plots
  • folium plots

and more!

Why MatPlotCheck?

There is often a need to test plots particularly when teaching data science courses. The Matplotlib api can be complex to navigate when trying to write tests. MatPlotCheck was developed to make it easier to test data, titles, axes and other elements of Matplotlib plots in support of both autograding and other testing needs.

MatPlotCheck was inspired by plotChecker developed by Jess Hamrick.

We spoke with her about our development and decided to extend plotChecker to suite some of the grading needs in our classes which include plots with spatial data using numpy for images and geopandas for vector data.

Install MatPlotCheck

You can install MatPlotCheck using pip. To use pip run:

pip install --upgrade matplotcheck2

For additional functionality, you can install optional dependencies:

# For spatial/vector plotting checks (geopandas, shapely)
pip install matplotcheck2[spatial]

# For time series plotting checks with regression lines (scipy, python-dateutil)
pip install matplotcheck2[timeseries]

# For folium map checks
pip install matplotcheck2[folium]

# Install all optional dependencies
pip install matplotcheck2[all]

[!NOTE]
This fork takes over the original matplotcheck package. The original package is no longer maintained and will not be updated. See https://github.com/earthlab/matplotcheck/pull/429

To import it into Python:

import matplotcheck as mpc

Examples

2D plot with x-axis label containing "x" and y-axis label containing "y" and "data"

from matplotcheck.cases import PlotBasicSuite
import pandas as pd
import unittest

axis = plt.gca()
data = pd.DataFrame(data={"x":xvals, "y":yvals})
suite = PlotBasicSuite(ax=axis, data_exp=data, xcol="x", ycol="y")
xlabel_contains=["x"], ylabel_contains = ["y","data"])
results = unittest.TextTestRunner().run(suite)

Example Plot with Spatial Raster Data

Plot containing a spatial raster image and spatial polygon vector data

from matplotcheck.cases import PlotRasterSuite
axis = plt.gca()
suite = PlotRasterSuite(ax=axis, im_expected=image, polygons=polygons)
results = unittest.TextTestRunner().run(suite)

If you prefer to forgo the groupings into TestSuites, you can just use the assertions instead.

2D plot with x-axis label containing "x" and y-axis label containing "y" and "data"

from matplotcheck.base import PlotTester
import pandas as pd
axis = plt.gca()
pt = PlotTester(axis)
data = pd.DataFrame(data={"x":xvals, "y":yvals})
pt.assert_xydata(data, "x", "y")
pt.assert_xlabel_contains(["x"])
pt.assert_ylabel_contains(["y", "data"])

Plot containing a spatial raster image and spatial polygon vector data

from matplotcheck.raster import RasterTester
from matplotcheck.vector import VectorTester
axis = plt.gca()
rt = RasterTester(axis)
vt = VectorTester(axis)
rt.assert_image(im_expected=image)
vt.assert_polygons(polygons_expected=polygons)

Caveats: This repo likely misses edge cases of the many ways matplotlib plots can be created. Please feel free to submit bugs!

Documentation

Documentation is available at matplotcheck2.readthedocs.io.

Active Contributors

Peter Stenger

Contributors

We've welcome any and all contributions. Below are some of the contributors to MatPlotCheck.

Leah Wasser Nathan Korinek Ryan Larocque Kylen Solvik Kristen Curry

How to Contribute

We welcome contributions to MatPlotCheck! Please be sure to check out our contributing guidelines for more information about submitting pull requests or changes to MatPlotCheck.

License & Citation

BSD-3

Citation Information

MatPlotCheck citation information can be found on zenodo. A link to bibtext format is below:

*bibtex

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

matplotcheck2-0.2.1.tar.gz (46.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

matplotcheck2-0.2.1-py3-none-any.whl (52.1 kB view details)

Uploaded Python 3

File details

Details for the file matplotcheck2-0.2.1.tar.gz.

File metadata

  • Download URL: matplotcheck2-0.2.1.tar.gz
  • Upload date:
  • Size: 46.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for matplotcheck2-0.2.1.tar.gz
Algorithm Hash digest
SHA256 aff869144e72e98eb8f7d6af240b6534ca33aafbecb69a8de2d875f482f2080b
MD5 eb65cd7c0a87fba7f68006598bbf132b
BLAKE2b-256 ff03d79cfd4114046d50d4dc45788458684f4c1e3a435b4045269995c8147ddd

See more details on using hashes here.

Provenance

The following attestation bundles were made for matplotcheck2-0.2.1.tar.gz:

Publisher: publish-pypi.yml on matplotcheck/matplotcheck

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file matplotcheck2-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: matplotcheck2-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 52.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for matplotcheck2-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5f27684041c302ee6a43894ac06baefb889b828305998553a63e0b36cbb99213
MD5 ea166d65bb4e214b2ee52cfaac5c4ab9
BLAKE2b-256 ed667fa0d6368c556d4e5fad6f73cedb47b768c25b57611c5ef1bbc73ef56216

See more details on using hashes here.

Provenance

The following attestation bundles were made for matplotcheck2-0.2.1-py3-none-any.whl:

Publisher: publish-pypi.yml on matplotcheck/matplotcheck

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page