Examples - GooseMPL#

Patch: plot finite element mesh#

../../_images/patch.svg

[source: patch.py]

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable

import GooseMPL as gplt

plt.style.use(["goose", "goose-latex"])

coor = np.array([[0.0, 0.0], [1.0, 0.0], [2.0, 0.0], [0.0, 1.0], [1.0, 1.0], [2.0, 1.0]])

conn = np.array([[0, 1, 4, 3], [1, 2, 5, 4]])

value = np.array([-1, +1])

fig, ax = plt.subplots()

im = gplt.patch(coor=coor, conn=conn, cindex=value, clim=[-2, 2], cmap="RdBu_r")

plt.xlim([-0.1, 2.1])
plt.ylim([-0.1, 1.1])

ax.set_aspect("equal")

div = make_axes_locatable(ax)
cax = div.append_axes("right", size="5%", pad=0.1)
cbar = plt.colorbar(im, cax=cax)

plt.savefig("patch.svg")
plt.close()

Histogram#

Histogram#

../../_images/histogram.svg

[source: histogram.py]

import matplotlib.pyplot as plt
import numpy as np

import GooseMPL as gplt

plt.style.use(["goose", "goose-latex"])


def distribution(a=100, b=3, g=-0.3, size=10000):
    r = np.random.random(size=size)

    return (a**g + (b**g - a**g) * r) ** (1.0 / g)


data = distribution()

fig, axes = plt.subplots(ncols=3, nrows=2, figsize=(3 * 8, 2 * 6))

# --- histogram ---

bin_edges = gplt.histogram_bin_edges(data, bins=41)

P, x = gplt.histogram(data, bins=bin_edges, density=False)

gplt.hist(P, x, facecolor=[0.2, 0.2, 0.2], axis=axes[0, 0])

P, x = gplt.histogram(data, bins=bin_edges, density=True)

gplt.hist(P, x, facecolor=[0.2, 0.2, 0.2], axis=axes[1, 0])

# --- histogram_log ---

bin_edges = gplt.histogram_bin_edges(data, bins=41, mode="log")

P, x = gplt.histogram(data, bins=bin_edges, density=False)

gplt.hist(P, x, facecolor="b", axis=axes[0, 1])

P, x = gplt.histogram(data, bins=bin_edges, density=True)

gplt.hist(P, x, facecolor="b", axis=axes[1, 1])

# --- histogram_uniform ---

bin_edges = gplt.histogram_bin_edges(data, bins=41, mode="uniform")

P, x = gplt.histogram(data, bins=bin_edges, density=False)

gplt.hist(P, x, facecolor="r", axis=axes[0, 2])

P, x = gplt.histogram(data, bins=bin_edges, density=True)

gplt.hist(P, x, facecolor="r", axis=axes[1, 2])

# --- axes settings ---

axes[0, 0].set_title(r"histogram")
axes[0, 1].set_title(r"histogram\_log")
axes[0, 2].set_title(r"histogram\_uniform")

for ax in axes.ravel():
    ax.set_xlabel(r"$x$")
    ax.set_ylabel(r"$N(x)$")

plt.savefig("histogram.svg")
plt.close()

Probability density#

../../_images/histogram_powerlaw.svg

[source: histogram_powerlaw.py]

import matplotlib.pyplot as plt
import numpy as np

import GooseMPL as gplt

plt.style.use(["goose", "goose-latex"])


def distribution(a=100, b=3, g=-0.3, size=10000):
    r = np.random.random(size=size)

    return (a**g + (b**g - a**g) * r) ** (1.0 / g)


data = distribution()

fig, axes = gplt.subplots(ncols=3)

# configure axes

for ax in axes:
    ax.set_xlabel(r"$x$")
    ax.set_ylabel(r"$\rho(x)$")

    ax.set_xscale("log")
    ax.set_yscale("log")

    ax.set_xlim([1e0, 1e3])
    ax.set_ylim([1e-3, 1e0])

# histogram

bin_edges = gplt.histogram_bin_edges(data, bins=41)

P, x = gplt.histogram(data, bins=bin_edges, density=True, return_edges=False)

axes[0].plot(x, P, marker="o", linestyle="none", markersize=5.0, color="k")

# histogram_log

bin_edges = gplt.histogram_bin_edges(data, bins=41, mode="log")

P, x = gplt.histogram(data, bins=bin_edges, density=True, return_edges=False)

axes[1].plot(x, P, marker="o", linestyle="none", markersize=5.0, color="b")

# histogram_uniform

bin_edges = gplt.histogram_bin_edges(data, bins=41, mode="uniform")

P, x = gplt.histogram(data, bins=bin_edges, density=True, return_edges=False)

axes[2].plot(x, P, marker="o", linestyle="none", markersize=5.0, color="r")

# add titles

axes[0].set_title(r"histogram")
axes[1].set_title(r"histogram\_log")
axes[2].set_title(r"histogram\_uniform")

# annotate powerlaw in different ways

for ax in axes:
    gplt.grid_powerlaw(exp=-1.3, axis=ax)

plt.savefig("histogram_powerlaw.svg")
plt.close()

Random number of discrete CDF#

../../_images/random_from_cdf.svg

[source: random_from_cdf.py]

import matplotlib.pyplot as plt
import numpy as np
import scipy.special

import GooseMPL as gplt

plt.style.use(["goose", "goose-latex"])

# generate CDF

mu = 0.0
sigma = 1.0
x = np.sort(np.random.normal(mu, sigma, size=10000))
Px = np.linspace(0, 1, x.size)

# draw random number from CDF

y = gplt.random_from_cdf(shape=(10000), P=Px, x=x)

# plot result

prob_x, bin_x = gplt.histogram(x, bins=100, return_edges=False, density=True)
prob_y, bin_y = gplt.histogram(y, bins=100, return_edges=False, density=True)

xi = np.linspace(-5, 5, 10000)
Pi = 1.0 / (sigma * np.sqrt(2.0 * np.pi)) * np.exp(-0.5 * ((xi - mu) / sigma) ** 2.0)
Ci = 0.5 * (1.0 + scipy.special.erf((xi - mu) / (sigma * np.sqrt(2.0))))

fig, axes = gplt.subplots(ncols=2)

axes[0].plot(xi, Pi, color="k")
axes[0].plot(bin_x, prob_x, color="r")
axes[0].plot(bin_y, prob_y, color="g")
axes[0].set_xlabel(r"$x$")
axes[0].set_ylabel(r"$p$")

axes[1].plot(xi, Ci, color="k", label="analytical")
axes[1].plot(x, Px, color="r", label="discrete CDF")
axes[1].plot(np.sort(y), np.linspace(0, 1, y.size), color="g", label="drawn random numbers")
axes[1].set_xlabel(r"$x$")
axes[1].set_ylabel(r"$P$")
axes[1].legend()

plt.savefig("random_from_cdf.svg")
plt.close()

Log-scale#

Ticks#

../../_images/ticks_log.svg

[source: ticks_log.py]

import matplotlib.pyplot as plt
import numpy as np

import GooseMPL as gplt

plt.style.use(["goose", "goose-latex", "goose-autolayout"])


fig, ax = plt.subplots()

x = np.logspace(1, 3, 1000)
y = 0.001 * x**2.0

ax.plot(x, y)

ax.set_xscale("log")
ax.set_yscale("log")

ax.set_xlim([1e1, 1e3])
ax.set_ylim([0.06, 2000])

gplt.log_xticks(keep=[0, -1], axis=ax)
gplt.log_yticks(keep=[], axis=ax)
gplt.log_minoryticks(keep=[0, -1], axis=ax)

plt.savefig("ticks_log.svg")
plt.close()

Fitting#

Powerlaw#

../../_images/fit_powerlaw.svg

[source: fit_powerlaw.py]

import matplotlib.pyplot as plt
import numpy as np

import GooseMPL as gplt

plt.style.use(["goose", "goose-latex", "goose-autolayout"])


fig, ax = plt.subplots()

ax.set_xscale("log")
ax.set_yscale("log")

ax.set_xlim([1e0, 1e4])
ax.set_ylim([1e-2, 1e4])

x = np.logspace(1, 3, 1000)
y = 0.001 * x**2.0
y = y + 0.1 * np.random.random(x.shape) - 0.05

ax.plot(x, y)

gplt.fit_powerlaw(x, y, axis=ax, c="r", extrapolate=dict(ls="--", c="r"))

plt.savefig("fit_powerlaw.svg")
plt.close()