Skip to main content

Small utility for creating reproducible figures.

Project description

Reproducible Figures

A small Python utility to generate easily reproducible figures for scientific papers. I often find myself generating figures for papers and then having to go through needlessly tedious processes to regenerate them when I want to make a small change, so I made this package. By generating figures using this package a folder is created with the figure, the data used to generate the figure, and the code used to generate the figure. I recommend combining this with a version control system like git to track changes for your figures.

Installation

pip install reproducible-figures

Example Usage

from reproducible_figures import save_reproducible_figure
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

def create_figure(data):
    fig, ax = plt.subplots()
    ax.plot(data['x'], data['y'])
    return fig

data = pd.DataFrame({
    'x': range(10),
    'y': np.random.normal(size=10)
})

save_reproducible_figure('test_save_figure', data, create_figure)

This will create the folder figures/test_save_figure with the following structure:

figures/test_save_figure
├── data.csv
├── test_save_figure.pdf
└── code.py

The data.csv file contains the data used to generate the figure, the figure.pdf file contains the figure itself, and the code.py file contains the code used to generate the figure.

In order to reproduce the figure, you can run:

python figures/test_save_figure/code.py

If you want to modify the figure, you can edit the code.py file and run it again.

Advanced Usage

Additional Imports

By default, the only libraries available in the code.py file are pandas as pd and matplotlib.pyplot as plt, matplotlib, numpy as np, and seaborn as sns. If you want to use other libraries, you can pass them to the save_reproducible_figure function:

save_reproducible_figure('test_save_figure',
                         data,
                         create_figure,
                         additional_imports=['import networkx as nx'])

This will add import networkx as nx to the code.py file. See the tests for an example using networkx to generate a figure.

Helper Functions

If you want to use helper functions in your code.py file, you can pass them to the save_reproducible_figure function. For example:

def preprocess_data(data: pd.DataFrame) -> pd.DataFrame:
    """Preprocess data."""
    data['y'] = data['y'] * 100
    return data


def create_test_figure_with_helper_fns(data: pd.DataFrame):
    """Create a figure."""
    fig, ax = plt.subplots()
    data = preprocess_data(data)
    ax.plot(data['x'], data['y'])

save_reproducible_figure('test_fig_preprocessor', data,
                         create_test_figure_with_helper_fns,
                         helper_fns=[preprocess_data])

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

reproducible_figures-1.0.1.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

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

reproducible_figures-1.0.1-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file reproducible_figures-1.0.1.tar.gz.

File metadata

  • Download URL: reproducible_figures-1.0.1.tar.gz
  • Upload date:
  • Size: 4.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for reproducible_figures-1.0.1.tar.gz
Algorithm Hash digest
SHA256 2c496f6b09a9fa432bc0b43f4e271ef8a37352e714d4a4cd43cf2b745542a873
MD5 7c3b5957e3c9bb4688c2314e6f523d2a
BLAKE2b-256 786badee87189a928673a3c7d22813d1d0a5bf86f2f490a3a2a323a64d2f8db8

See more details on using hashes here.

File details

Details for the file reproducible_figures-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for reproducible_figures-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d6d4026b09bc6a5cf67e31d4ff33da17a9b9c743cedfd1379d11653490df093e
MD5 aab1c5b9b2e55c43091963233576a417
BLAKE2b-256 674ab8fe903cd90458b82ba79e4411f099533e16eb4be065c1d3ee6c0ca33a35

See more details on using hashes here.

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