Skip to main content

Functions to check Matplotlib plot outputs

Project description

DOI

MatPlotCheck

Build Status codecov Documentation Status Code style: black

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!

Install

To install, use pip. --upgrade is optional but it ensures that the package overwrites when you install and you have the current version. If you don't have the package yet you can still use the --upgrade argument.

pip install --upgrade matplotcheck

Then import it into python.

import matplotcheck as mpc

Background

This library was developed to simplify the autograding process of Matplotlib plots. Visually similar plots can be created in a variety of ways and hold different metadata. Our goal is to abstract away these differences by creating a simple way to test student plots.

Beyond that, we have noticed common groupings of assertions for specific plot types. PlotBasicSuiteobjects have been created to avoid repetition in writing out assertions, and return a TestSuite instead. To run the suite after it has been created, use a unittest text runner.

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!

Active Contributors

  • Leah Wasser

Dev Setup (to be moved to contributing)

setup the matplotcheck envt

conda env create -f environment.yml
conda activate matplotcheck-dev

Then setup all of the development requirements.

pip install -e .
pip install -r dev-requirements.txt
pre-commit install

Project details


Download files

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

Files for matplotcheck, version 0.0.11
Filename, size File type Python version Upload date Hashes
Filename, size matplotcheck-0.0.11.tar.gz (25.9 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page