Examples - GooseMPL#
Patch: plot finite element mesh#
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#
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#
[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#
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#
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#
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()