Gait Plots#

[1]:
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
[2]:
mpl.rcParams["text.usetex"] = True
mpl.rcParams["text.latex.preamble"] = r"\usepackage{amsmath}"
plt.rcParams["font.size"] = 18
[3]:
fig, axs = plt.subplots(1, 3, figsize=(15, 2.5))
stance_color = "black"
swing_color = "white"
edge_color = "black"

# Walking Gait
axs[0].broken_barh(
    [(0, 10), (10, 10), (20, 10)],
    (13, 4),
    facecolors=stance_color,
    edgecolor=edge_color,
)
axs[0].broken_barh([(30, 10)], (13, 4), facecolors=swing_color, edgecolor=edge_color)

axs[0].broken_barh(
    [(0, 10), (20, 10), (30, 10)], (8, 4), facecolors=stance_color, edgecolor=edge_color
)
axs[0].broken_barh([(10, 10)], (8, 4), facecolors=swing_color, edgecolor=edge_color)

axs[0].broken_barh(
    [(10, 10), (20, 10), (30, 10)],
    (3, 4),
    facecolors=stance_color,
    edgecolor=edge_color,
)
axs[0].broken_barh([(0, 10)], (3, 4), facecolors=swing_color, edgecolor=edge_color)

axs[0].broken_barh(
    [(0, 10), (10, 10), (30, 10)],
    (-2, 4),
    facecolors=stance_color,
    edgecolor=edge_color,
)
axs[0].broken_barh([(20, 10)], (-2, 4), facecolors=swing_color, edgecolor=edge_color)


axs[0].set_xticks([0, 40])
axs[0].set_xticklabels(
    [
        r"$\textbf{Start}$" + "\n" + r"$\textbf{Cycle}$",
        r"$\textbf{End}$" + "\n" + r"$\textbf{Cycle}$",
    ]
)
axs[0].set_yticks([0, 5, 10, 15])
axs[0].set_yticklabels(
    [r"$\textbf{HR}$", r"$\textbf{HL}$", r"$\textbf{FR}$", r"$\textbf{FL}$"]
)
axs[0].tick_params(left=False, bottom=False)
axs[0].spines["top"].set_visible(False)
axs[0].spines["bottom"].set_visible(False)
axs[0].spines["left"].set_visible(False)
axs[0].spines["right"].set_visible(False)
axs[0].set_title(r"$\textbf{Walk Gait}$", fontsize=16)
axs[0].set_aspect("equal")


# Trotting Gait
axs[1].broken_barh(
    [(0, 20)],
    (13, 4),
    facecolors=stance_color,
    edgecolor=edge_color,
    label=r"$\textbf{Stance Phase}$",
)
axs[1].broken_barh(
    [(20, 20)],
    (13, 4),
    facecolors=swing_color,
    edgecolor=edge_color,
    label=r"$\textbf{Swing Phase}$",
)

axs[1].broken_barh([(20, 20)], (8, 4), facecolors=stance_color, edgecolor=edge_color)
axs[1].broken_barh([(0, 20)], (8, 4), facecolors=swing_color, edgecolor=edge_color)

axs[1].broken_barh([(20, 20)], (3, 4), facecolors=stance_color, edgecolor=edge_color)
axs[1].broken_barh([(0, 20)], (3, 4), facecolors=swing_color, edgecolor=edge_color)

axs[1].broken_barh([(0, 20)], (-2, 4), facecolors=stance_color, edgecolor=edge_color)
axs[1].broken_barh([(20, 20)], (-2, 4), facecolors=swing_color, edgecolor=edge_color)

axs[1].set_xticks([0, 40])
axs[1].set_xticklabels(
    [
        r"$\textbf{Start}$" + "\n" + r"$\textbf{Cycle}$",
        r"$\textbf{End}$" + "\n" + r"$\textbf{Cycle}$",
    ]
)
axs[1].set_yticks([0, 5, 10, 15])
axs[1].set_yticklabels(
    [r"$\textbf{HR}$", r"$\textbf{HL}$", r"$\textbf{FR}$", r"$\textbf{FL}$"]
)
axs[1].tick_params(left=False, bottom=False)
axs[1].spines["top"].set_visible(False)
axs[1].spines["bottom"].set_visible(False)
axs[1].spines["left"].set_visible(False)
axs[1].spines["right"].set_visible(False)
axs[1].set_title(r"$\textbf{Trot Gait}$", fontsize=16)
axs[1].set_aspect("equal")

handles, labels = axs[1].get_legend_handles_labels()
fig.legend(
    handles,
    labels,
    loc="lower center",
    bbox_to_anchor=(0.5, -0.35),
    frameon=False,
    ncol=2,
)

# Gallop Gait
axs[2].broken_barh([(30, 10)], (13, 4), facecolors=stance_color, edgecolor=edge_color)
axs[2].broken_barh([(0, 30)], (13, 4), facecolors=swing_color, edgecolor=edge_color)

axs[2].broken_barh([(10, 10)], (8, 4), facecolors=stance_color, edgecolor=edge_color)
axs[2].broken_barh(
    [(0, 10), (20, 20)], (8, 4), facecolors=swing_color, edgecolor=edge_color
)

axs[2].broken_barh([(0, 10)], (3, 4), facecolors=stance_color, edgecolor=edge_color)
axs[2].broken_barh([(10, 30)], (3, 4), facecolors=swing_color, edgecolor=edge_color)

axs[2].broken_barh([(20, 10)], (-2, 4), facecolors=stance_color, edgecolor=edge_color)
axs[2].broken_barh(
    [(0, 20), (30, 10)], (-2, 4), facecolors=swing_color, edgecolor=edge_color
)


axs[2].set_xticks([0, 40])
axs[2].set_xticklabels(
    [
        r"$\textbf{Start}$" + "\n" + r"$\textbf{Cycle}$",
        r"$\textbf{End}$" + "\n" + r"$\textbf{Cycle}$",
    ]
)
axs[2].set_yticks([0, 5, 10, 15])
axs[2].set_yticklabels(
    [r"$\textbf{HR}$", r"$\textbf{HL}$", r"$\textbf{FR}$", r"$\textbf{FL}$"]
)
axs[2].tick_params(left=False, bottom=False)
axs[2].spines["top"].set_visible(False)
axs[2].spines["bottom"].set_visible(False)
axs[2].spines["left"].set_visible(False)
axs[2].spines["right"].set_visible(False)
axs[2].set_title(r"$\textbf{Gallop Gait}$", fontsize=16)
axs[2].set_aspect("equal")

plt.savefig(
    "../images/GaitPhasePlots.png", dpi=200, transparent=False, bbox_inches="tight"
)
../_images/notebooks_GaitPlots_3_0.png
[4]:
fig, axs = plt.subplots(1, 3, figsize=(20, 3))
stance_color = "black"
swing_color = "white"
edge_color = "black"

# Walking Gait
axs[0].broken_barh([(0, 30)], (13, 4), facecolors=stance_color, edgecolor=edge_color)
axs[0].broken_barh([(30, 10)], (13, 4), facecolors=swing_color, edgecolor=edge_color)

axs[0].broken_barh([(-20, 30)], (8, 4), facecolors=stance_color, edgecolor=edge_color)
axs[0].broken_barh([(10, 10)], (8, 4), facecolors=swing_color, edgecolor=edge_color)

axs[0].broken_barh([(-30, 30)], (3, 4), facecolors=stance_color, edgecolor=edge_color)
axs[0].broken_barh([(0, 10)], (3, 4), facecolors=swing_color, edgecolor=edge_color)

axs[0].broken_barh([(-10, 30)], (-2, 4), facecolors=stance_color, edgecolor=edge_color)
axs[0].broken_barh([(20, 10)], (-2, 4), facecolors=swing_color, edgecolor=edge_color)


axs[0].set_xticks([0])
axs[0].set_xticklabels([r"$\textbf{Start}$" + "\n" + r"$\textbf{Cycle}$"])
axs[0].set_yticks([0, 5, 10, 15])
axs[0].set_yticklabels(
    [r"$\textbf{HR}$", r"$\textbf{HL}$", r"$\textbf{FR}$", r"$\textbf{FL}$"]
)
axs[0].tick_params(left=False, bottom=False)
axs[0].spines["top"].set_visible(False)
axs[0].spines["bottom"].set_visible(False)
axs[0].spines["left"].set_visible(False)
axs[0].spines["right"].set_visible(False)
axs[0].set_title(r"$\textbf{Walk Gait}$", fontsize=16)
axs[0].set_aspect("equal")

# Trotting Gait
axs[1].broken_barh(
    [(0, 20)],
    (13, 4),
    facecolors=stance_color,
    edgecolor=edge_color,
    label=r"$\textbf{Stance Phase}$",
)
axs[1].broken_barh(
    [(20, 20)],
    (13, 4),
    facecolors=swing_color,
    edgecolor=edge_color,
    label=r"$\textbf{Swing Phase}$",
)

axs[1].broken_barh([(-20, 20)], (8, 4), facecolors=stance_color, edgecolor=edge_color)
axs[1].broken_barh([(0, 20)], (8, 4), facecolors=swing_color, edgecolor=edge_color)

axs[1].broken_barh([(-20, 20)], (3, 4), facecolors=stance_color, edgecolor=edge_color)
axs[1].broken_barh([(0, 20)], (3, 4), facecolors=swing_color, edgecolor=edge_color)

axs[1].broken_barh([(0, 20)], (-2, 4), facecolors=stance_color, edgecolor=edge_color)
axs[1].broken_barh([(20, 20)], (-2, 4), facecolors=swing_color, edgecolor=edge_color)

axs[1].set_xticks([0])
axs[1].set_xticklabels([r"$\textbf{Start}$" + "\n" + r"$\textbf{Cycle}$"])
axs[1].set_yticks([0, 5, 10, 15])
axs[1].set_yticklabels(
    [r"$\textbf{HR}$", r"$\textbf{HL}$", r"$\textbf{FR}$", r"$\textbf{FL}$"]
)
axs[1].tick_params(left=False, bottom=False)
axs[1].spines["top"].set_visible(False)
axs[1].spines["bottom"].set_visible(False)
axs[1].spines["left"].set_visible(False)
axs[1].spines["right"].set_visible(False)
axs[1].set_title(r"$\textbf{Trot Gait}$", fontsize=16)
axs[1].set_aspect("equal")

handles, labels = axs[1].get_legend_handles_labels()
fig.legend(
    handles,
    labels,
    loc="lower center",
    bbox_to_anchor=(0.5, -0.1),
    frameon=False,
    ncol=2,
)

# Gallop Gait
axs[2].broken_barh([(-10, 10)], (13, 4), facecolors=stance_color, edgecolor=edge_color)
axs[2].broken_barh([(0, 30)], (13, 4), facecolors=swing_color, edgecolor=edge_color)

axs[2].broken_barh([(-30, 10)], (8, 4), facecolors=stance_color, edgecolor=edge_color)
axs[2].broken_barh([(-20, 30)], (8, 4), facecolors=swing_color, edgecolor=edge_color)

axs[2].broken_barh([(0, 10)], (3, 4), facecolors=stance_color, edgecolor=edge_color)
axs[2].broken_barh([(10, 30)], (3, 4), facecolors=swing_color, edgecolor=edge_color)

axs[2].broken_barh([(-20, 10)], (-2, 4), facecolors=stance_color, edgecolor=edge_color)
axs[2].broken_barh([(-10, 30)], (-2, 4), facecolors=swing_color, edgecolor=edge_color)


axs[2].set_xticks([0])
axs[2].set_xticklabels([r"$\textbf{Start}$" + "\n" + r"$\textbf{Cycle}$"])
axs[2].set_yticks([0, 5, 10, 15])
axs[2].set_yticklabels(
    [r"$\textbf{HR}$", r"$\textbf{HL}$", r"$\textbf{FR}$", r"$\textbf{FL}$"]
)
axs[2].tick_params(left=False, bottom=False)
axs[2].spines["top"].set_visible(False)
axs[2].spines["bottom"].set_visible(False)
axs[2].spines["left"].set_visible(False)
axs[2].spines["right"].set_visible(False)
axs[2].set_title(r"$\textbf{Gallop Gait}$", fontsize=16)
axs[2].set_aspect("equal")

plt.savefig(
    "../images/GaitPhaseOffsetPlots.png",
    dpi=200,
    transparent=False,
    bbox_inches="tight",
)
../_images/notebooks_GaitPlots_4_0.png
[ ]: