Python - Types basiques
import numpy as np
import matplotlib.pyplot as plt
import utils.plotting_params
# Donnees du robot
time = np.linspace(0, 20, 500)
dt = time[1] - time[0]
x = 5 * np.cos(time / 8) + time * 0.4
y = 5 * np.sin(time / 8) + time * 0.15
v_x = 0.8 + 0.3 * np.sin(time / 4)
v_y = 0.2 + 0.5 * np.sin(time / 2.5) * np.cos(time)
v = np.sqrt(v_x**2 + v_y**2)
a_x = np.gradient(v_x, time)
a_y = np.gradient(v_y, time)
a = np.sqrt(a_x**2 + a_y**2)
x = np.cumsum(v_x * dt)
y = np.cumsum(v_y * dt)
battery = 100 - 0.03 * (np.cumsum(a)) * time
temperature = 38 + 7 * a + np.random.normal(0, 0.5, len(time))
sensor_error = (0.05 * np.sin(time) + np.random.normal(0, 0.02, len(time)))
plt.plot(time, v_x)
plt.show()
Simple plot
# 1. Trajectoire du robot
fig, ax = plt.subplots(figsize=(10, 7))
ax.plot(
x,
y,
color="blue",
linewidth=2,
label="Trajectoire"
)
ax.scatter(
x[0],
y[0],
color="green",
s=150,
label="Depart",
zorder=5
)
ax.scatter(
x[-1],
y[-1],
color="red",
s=150,
label="Arrivee",
zorder=5
)
ax.set_title("Trajectoire du robot")
ax.set_xlabel("Position X (m)")
ax.set_ylabel("Position Y (m)")
ax.axis("equal")
ax.grid(True)
ax.legend()
plt.show()
Plot multiple avec axes partagés
# 2. Vitesse du robot
fig, axs = plt.subplots(2, sharex=True, sharey=True, figsize=(12, 4*2))
for ax, v_i, axis in zip(axs, (v_x, v_y), "XY"):
ax.plot(
time,
v_i,
color="orange",
)
ax.axhline(
0,
color="black",
linestyle="--"
)
ax.set_title(f"Vitesse du robot selon {axis}")
ax.set_xlabel("Temps (s)")
ax.set_ylabel("v (m/s)")
ax.grid(True)
plt.show()
```## Plot multiple avec un axe partagé
```python
# 3. Acceleration
fig, axs = plt.subplots(2, sharex=True, figsize=(12, 4*2))
for ax, a_i, axis in zip(axs, (a_x, a_y), "XY"):
ax.plot(
time,
a_i,
color="purple",
)
ax.axhline(
0,
color="black",
linestyle="--"
)
ax.set_title(f"Acceleration du robot selon {axis}")
ax.set_xlabel("Temps (s)")
ax.set_ylabel("a (m/s²)")
ax.grid(True)
plt.show()
Plot avec fill_between
# 4. Batterie
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(
time,
battery,
color="green",
linewidth=3
)
ax.fill_between(
time,
battery,
alpha=0.2,
color="green"
)
ax.axhline(
20,
color="red",
linestyle="--",
label="Seuil critique"
)
ax.set_title("Niveau de batterie")
ax.set_xlabel("Temps (s)")
ax.set_ylabel("Batterie (%)")
ax.set_ylim(0, 105)
ax.grid(True)
ax.legend()
plt.show()
Plot avec axhline
# 5. Temperature des moteurs
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(
time,
temperature,
color="red",
label="Temperature moteur"
)
ax.axhline(
40,
color="orange",
linestyle="--",
label="Seuil attention"
)
ax.axhline(
45,
color="darkred",
linestyle="--",
label="Seuil critique"
)
ax.set_title("Temperature des moteurs")
ax.set_xlabel("Temps (s)")
ax.set_ylabel("Temperature (°C)")
ax.grid(True)
ax.legend()
plt.show()
Plot avec axhline et fill_between
# 6. Erreur des capteurs
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(
time,
sensor_error,
color="red",
linewidth=1,
label="Erreur capteur"
)
ax.axhline(
0,
color="black",
linestyle="--"
)
ax.fill_between(
time,
sensor_error,
0,
alpha=0.2,
color="red"
)
ax.set_title("Erreur du capteur de position")
ax.set_xlabel("Temps (s)")
ax.set_ylabel("Erreur (m)")
ax.grid(True)
ax.legend()
plt.show()
Plot multiple
# 7. Comparaison trajectoire reelle / trajectoire ideale
ideal_x = time * 0.8
ideal_y = time * 0.3
fig, ax = plt.subplots(figsize=(10, 7))
ax.plot(
ideal_x,
ideal_y,
color="black",
linestyle="--",
linewidth=2,
label="Trajectoire ideale"
)
ax.plot(
x,
y,
color="blue",
linewidth=2,
label="Trajectoire reelle"
)
ax.set_title("Comparaison des trajectoires")
ax.set_xlabel("Position X (m)")
ax.set_ylabel("Position Y (m)")
ax.axis("equal")
ax.grid(True)
ax.legend()
plt.show()
Plot avec scatter
# 8. Carte des obstacles
obstacle_x = [3, 4, 5, 8, 9, 12, 13, 14, 17, 18]
obstacle_y = [2, 2.5, 2, 5, 6, 3, 4, 3.5, 7, 6.5]
fig, ax = plt.subplots(figsize=(10, 7))
ax.plot(
x,
y,
color="blue",
linewidth=2,
label="Robot"
)
ax.scatter(
obstacle_x,
obstacle_y,
color="black",
marker="s",
s=100,
label="Obstacle"
)
ax.scatter(
x[0],
y[0],
color="green",
s=150,
label="Depart"
)
ax.scatter(
x[-1],
y[-1],
color="red",
s=150,
label="Arrivee"
)
ax.set_title("Carte de navigation")
ax.set_xlabel("X (m)")
ax.set_ylabel("Y (m)")
ax.axis("equal")
ax.grid(True)
ax.legend()
plt.show()
Plot avec imshow
# 9. Carte de chaleur des capteurs
sensor_x = np.linspace(-10, 10, 50)
sensor_y = np.linspace(-10, 10, 50)
X, Y = np.meshgrid(
sensor_x,
sensor_y
)
distance = np.sqrt(X**2 + Y**2)
sensor_data = np.exp(-distance / 10)
fig, ax = plt.subplots(figsize=(9, 7))
heatmap = ax.imshow(
sensor_data,
extent=[
sensor_x.min(),
sensor_x.max(),
sensor_y.min(),
sensor_y.max()
],
origin="lower",
cmap="viridis"
)
fig.colorbar(
heatmap,
ax=ax,
label="Intensite du signal"
)
ax.set_title("Carte de chaleur du capteur")
ax.set_xlabel("X (m)")
ax.set_ylabel("Y (m)")
plt.show()
Plot multiple - tableau
# 10. Tableau de bord robotique
fig, axes = plt.subplots(
2,
2,
figsize=(14, 9)
)
# Trajectoire
axes[0, 0].plot(
x,
y,
color="blue"
)
axes[0, 0].set_title("Trajectoire")
axes[0, 0].set_xlabel("X (m)")
axes[0, 0].set_ylabel("Y (m)")
axes[0, 0].axis("equal")
axes[0, 0].grid(True)
# Vitesse
axes[0, 1].plot(
time,
v,
color="orange"
)
axes[0, 1].set_title("Norme de la vitesse")
axes[0, 1].set_xlabel("Temps (s)")
axes[0, 1].set_ylabel("m/s")
axes[0, 1].grid(True)
# Batterie
axes[1, 0].plot(
time,
battery,
color="green"
)
axes[1, 0].axhline(
20,
color="red",
linestyle="--"
)
axes[1, 0].set_title("Batterie")
axes[1, 0].set_xlabel("Temps (s)")
axes[1, 0].set_ylabel("%")
axes[1, 0].grid(True)
# Temperature
axes[1, 1].plot(
time,
temperature,
color="red"
)
axes[1, 1].axhline(
40,
color="orange",
linestyle="--"
)
axes[1, 1].set_title("Temperature")
axes[1, 1].set_xlabel("Temps (s)")
axes[1, 1].set_ylabel("°C")
axes[1, 1].grid(True)
fig.suptitle(
"Tableau de bord du robot",
fontsize=18,
fontweight="bold"
)
plt.show()