47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
import sys
|
|
import matplotlib
|
|
matplotlib.use('QtAgg')
|
|
from PyQt5 import QtWidgets
|
|
import matplotlib.pyplot as plt
|
|
from matplotlib.animation import FuncAnimation
|
|
import numpy as np
|
|
from jupedsim.internal.notebook_utils import read_sqlite_file
|
|
|
|
def visualize(trajectory_file):
|
|
traj_data,walkable_area = read_sqlite_file(trajectory_file)
|
|
df = traj_data.data
|
|
fig,ax = plt.subplots(figsize=(12,8))
|
|
if hasattr(walkable_area,"polygon"):
|
|
x,y = walkable_area.polygon.exterior.xy
|
|
ax.plot(x,y,'k-',alpha=0.3)
|
|
scatter = ax.scatter([],[],s=20,c="blue",alpha=0.7)
|
|
frame_text = ax.text(0.02,0.98,'',transform=ax.transAxes)
|
|
frames=sorted(df["frame"].unique())
|
|
frames=frames[::5]
|
|
|
|
def update(frame):
|
|
frame_data = df[df["frame"]==frame]
|
|
if len(frame_data)>0:
|
|
positions=np.column_stack(
|
|
[frame_data["x"].values,frame_data["y"].values])
|
|
scatter.set_offsets(positions)
|
|
frame_text.set_text(f"Frame: {frame}, Agents: {len(frame_data)}")
|
|
return scatter, frame_text
|
|
|
|
anim = FuncAnimation(fig,update,frames=frames,blit=False,interval=1)
|
|
app = QtWidgets.QApplication(sys.argv)
|
|
plt.show(block=False)
|
|
sys.exit(app.exec())
|
|
|
|
if __name__ == "__main__":
|
|
|
|
file_1 = "SRS_evac_2025-11-23_23-03-09.sqlite"
|
|
file_2 = "SRS_evac_2025-11-24_01-03-06.sqlite"
|
|
file_3 = "SRS_evac_2025-11-30_19-43-15.sqlite"
|
|
file_4 = "crosswalk_sim.sqlite"
|
|
file_5 = "_SRS_sim_232009_.sqlite"
|
|
file_6 = "_SRS_sim_231809_.sqlite"
|
|
file_7 = "_SRS_sim_231233_.sqlite"
|
|
file_8 = "_SRS_sim_010542_.sqlite"
|
|
file_9 = "_SRS_sim_013834_.sqlite"
|
|
visualize(file_3) |