Skip to main content

Documentation Status

Downloads PyPI version GitHub code size in bytes GitHub last commit (branch)

Matplotlib is great library which offers huge flexibility due to its object oriented programming style. However, most of the times, we the users don't need that much flexibiliy and just want to get things done as quickly as possible. For example why should I write at least three lines to plot a simple array with legend when same can be done in one line and my purpose is just to view the array. Why I can't simply do plot(data) or imshow(img). This motivation gave birth to this library. easy_mpl stands for easy maplotlib. The purpose of this is to ease the use of matplotlib while keeping the flexibility of object oriented programming paradigm of matplotlib intact. Using these one liners will save the time and will not hurt. Moreover, you can swap most functions of this library with that of matplotlib and vice versa. For more detailed description see introduction

Installation

This package can be installed using pip from pypi using following command

pip install easy_mpl

API

plot

bar_chart

regplot

imshow

hist

pie

scatter

contour

dumbbell_plot

ridge

parallel_coordinates

spider_plot

taylor_plot

lollipop_plot

circular_bar_plot

boxplot

violin_plot

Usage

For a wide range of usage examples see gallery of examples

plot

import numpy as np
from easy_mpl import plot

x = np.random.randint(2, 10, 10)

plot(x, '--o', color=np.array([35, 81, 53]) / 256.0,
     ax_kws=dict(xlabel="Days", ylabel="Values"))

scatter

import numpy as np
from easy_mpl import scatter
import matplotlib.pyplot as plt
x = np.random.random(100)
y = np.random.random(100)
ax, _ = scatter(x, y, colorbar=True)

assert isinstance(ax, plt.Axes)

imshow

import numpy as np
from easy_mpl import imshow

data = np.random.random((4, 10))
imshow(data, cmap="YlGn",
       xticklabels=[f"Feature {i}" for i in range(data.shape[1])],
       grid_params={'color': 'w', 'linewidth': 2}, annotate=True,
       colorbar=True)

bar_chart

from easy_mpl import bar_chart

bar_chart(
    [1,2,3,4,4,5,3,2,5],
    ['a','b','c','d','e','f','g','h','i'],
    bar_labels=[11, 23, 12,43, 123, 12, 43, 234, 23],
    cmap="GnBu",
    sort=True)

hist

import numpy as np
from easy_mpl import hist

data = np.random.randn(1000)

hist(data, bins = 100)

lollipop_plot

import numpy as np
from easy_mpl import lollipop_plot

y = np.random.randint(0, 10, size=10)
lollipop_plot(y, sort=True, title="sort")

dumbbell_plot

import numpy as np
from easy_mpl import dumbbell_plot

st = np.random.randint(1, 5, 10)
en = np.random.randint(11, 20, 10)

dumbbell_plot(st, en)

regplot

import numpy as np
from easy_mpl import regplot

rng = np.random.default_rng(313)
x = rng.uniform(0, 10, size=100)
y = x + rng.normal(size=100)

regplot(x, y, line_color='black')

ridge

import numpy as np
from easy_mpl import ridge

data = np.random.random((100, 3))
ridge(data)

pie

from easy_mpl import pie

explode = (0, 0.1, 0, 0, 0)
pie(fractions=[0.2, 0.3, 0.15, 0.25, 0.1], explode=explode)

contour

import numpy as np
from easy_mpl import contour

_x = np.random.uniform(-2, 2, 200)
_y = np.random.uniform(-2, 2, 200)
_z = _x * np.exp(-_x**2 - _y**2)
contour(_x, _y, _z, fill_between=True, show_points=True)

circular_bar_plot

import numpy as np
from easy_mpl import circular_bar_plot

data = np.random.random(50, )

circular_bar_plot(data, text_kws={"fontsize": 16})

parallel_coordinates

import numpy as np
import pandas as pd
from easy_mpl import parallel_coordinates

ynames = ['P1', 'P2', 'P3', 'P4', 'P5']  # feature/column names
N1, N2, N3 = 10, 5, 8
N = N1 + N2 + N3
categories_ = ['a', 'b', 'c', 'd', 'e', 'f']
y1 = np.random.uniform(0, 10, N) + 7
y2 = np.sin(np.random.uniform(0, np.pi, N))
y3 = np.random.binomial(300, 1 / 10, N)
y4 = np.random.binomial(200, 1 / 3, N)
y5 = np.random.uniform(0, 800, N)
# combine all arrays into a pandas DataFrame
data_df = pd.DataFrame(np.column_stack((y1, y2, y3, y4, y5)),
                       columns=ynames)

# using continuous values for categories
parallel_coordinates(data_df, names=ynames,
                     categories=np.random.randint(0, 5, N))

spider_plot

import pandas as pd
from easy_mpl import spider_plot

df = pd.DataFrame.from_dict(
    {'summer': {'a': -0.2, 'b': 0.1, 'c': 0.0, 'd': 0.1, 'e': 0.2, 'f': 0.3},
     'winter': {'a': -0.3, 'b': 0.1, 'c': 0.0, 'd': 0.2, 'e': 0.15, 'f': 0.25},
     'automn': {'a': -0.1, 'b': 0.3, 'c': 0.15, 'd': 0.24, 'e': 0.18, 'f': 0.2}})
spider_plot(df, xtick_kws={'size': 13}, frame="polygon",
           color=['b', 'r', 'g', 'm'],
            fill_color=['b', 'r', 'g', 'm'])

taylor_plot

import numpy as np
from easy_mpl import taylor_plot

np.random.seed(313)
observations = {
    'site1': np.random.normal(20, 40, 10),
    'site2': np.random.normal(20, 40, 10),
    'site3': np.random.normal(20, 40, 10),
    'site4': np.random.normal(20, 40, 10),
}

simulations = {
    "site1": {"LSTM": np.random.normal(20, 40, 10),
                "CNN": np.random.normal(20, 40, 10),
                "TCN": np.random.normal(20, 40, 10),
                "CNN-LSTM": np.random.normal(20, 40, 10)},

    "site2": {"LSTM": np.random.normal(20, 40, 10),
                "CNN": np.random.normal(20, 40, 10),
                "TCN": np.random.normal(20, 40, 10),
                "CNN-LSTM": np.random.normal(20, 40, 10)},

    "site3": {"LSTM": np.random.normal(20, 40, 10),
                "CNN": np.random.normal(20, 40, 10),
                "TCN": np.random.normal(20, 40, 10),
                "CNN-LSTM": np.random.normal(20, 40, 10)},

    "site4": {"LSTM": np.random.normal(20, 40, 10),
                "CNN": np.random.normal(20, 40, 10),
                "TCN": np.random.normal(20, 40, 10),
                "CNN-LSTM": np.random.normal(20, 40, 10)},
}

# define positions of subplots

rects = dict(site1=221, site2=222, site3=223, site4=224)

taylor_plot(observations=observations,
            simulations=simulations,
            axis_locs=rects,
            plot_bias=True,
            cont_kws={'colors': 'blue', 'linewidths': 1.0, 'linestyles': 'dotted'},
            grid_kws={'axis': 'x', 'color': 'g', 'lw': 1.0},
            title="mutiple subplots")

boxplot

import pandas as pd
from easy_mpl import boxplot
from easy_mpl.utils import _rescale
f = "https://raw.githubusercontent.com/AtrCheema/AI4Water/master/ai4water/datasets/arg_busan.csv"
df = pd.read_csv(f, index_col='index').iloc[:, 0:10]
for col in df.columns:
    df[col] = _rescale(df[col])

boxplot(df,
        fill_color="GnBu",
        notch=True,
        patch_artist=True,
        medianprops={"color": "black"})

violin_plot

import matplotlib.pyplot as plt
import pandas as pd
from easy_mpl import violin_plot
from easy_mpl.utils import _rescale

f = "https://raw.githubusercontent.com/AtrCheema/AI4Water/master/ai4water/datasets/arg_busan.csv"
df = pd.read_csv(f, index_col='index').iloc[:, 0:10]

for col in df.columns:
    df[col] = _rescale(df[col])

axes = violin_plot(df, show=False)
axes.set_facecolor("#fbf9f4")
plt.tight_layout()
plt.show()

Code Structure

Visualization of this repo

Metadata

Release files for easy-mpl 0.21.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for easy-mpl 0.21.5
File Size Uploaded
easy_mpl-0.21.5.tar.gz 93.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for easy-mpl 0.21.5
File Interpreter ABI Platform
easy_mpl-0.21.5-py3-none-any.whl Python 3 none any Details

Total release size: 210.5 kB

Release files / easy_mpl-0.21.5.tar.gz

Download URL easy_mpl-0.21.5.tar.gz
Size 93.0 kB
Tags Source
SHA-256 checksum
How to use checksums
fa90fc4667f9e23054bdaa42aba8459bf923cfdd4ff1ea932dbbe7df8e23e928
BLAKE2b-256 checksum
How to use checksums
c87323fda4f758822e6d46c1f7960710d89fa1258e688b91242d09b3295fdf92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.0

Release files / easy_mpl-0.21.5-py3-none-any.whl

Download URL easy_mpl-0.21.5-py3-none-any.whl
Size 117.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
407a8b6a57e05a05b27c1c4235595614b26ff39ad9f817f0f7fa58ad60e03e48
BLAKE2b-256 checksum
How to use checksums
c27b69aaabf072bf093b43d704285bf86fc79dd9170e49c1bbb005a6c864f440
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.0

Release history Release notifications | RSS feed

This release

0.21.5 This release

2 release files

0.21.4

1 release file

0.21.3

1 release file

0.21.2

1 release file

0.21.1

2 release files

0.20.5

2 release files

0.20.4

1 release file

0.20.3

1 release file

0.20.2

1 release file

0.20.1

1 release file

0.20

1 release file

0.19

1 release file

0.18

1 release file

0.17

1 release file

0.12.0

1 release file

0.11.0

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page