rpm plot script
This commit is contained in:
76
src/plot_rpm_graphs.py
Normal file
76
src/plot_rpm_graphs.py
Normal file
@@ -0,0 +1,76 @@
|
||||
# Copyright (C) 2026 Hector van der Aa <hector@h3cx.dev>
|
||||
# Copyright (C) 2026 Association Exergie <association.exergie@gmail.com>
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import pandas as pd
|
||||
from pathlib import Path
|
||||
import argparse
|
||||
from tqdm import tqdm
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("directory", type=Path, help="Source data directory")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
directory: Path = args.directory
|
||||
|
||||
if not directory.is_dir():
|
||||
parser.error(f"{directory} is not a valid directory")
|
||||
|
||||
print(f"Processing data in: {directory}")
|
||||
|
||||
files: list[Path] = []
|
||||
|
||||
for path in directory.glob("*.csv"):
|
||||
stem = path.stem
|
||||
|
||||
try:
|
||||
base_name, channel = stem.rsplit("_", 1)
|
||||
except ValueError:
|
||||
print(f"Skipping badly named file: {path}")
|
||||
continue
|
||||
|
||||
if channel != "trimmed":
|
||||
print(f"Skipping unknown file: {path}")
|
||||
continue
|
||||
|
||||
files.append(path)
|
||||
|
||||
|
||||
for file in files:
|
||||
trimmed_df = pd.read_csv(file).set_index("time_us", drop=False)
|
||||
base_name, _ = file.stem.rsplit("_", 1)
|
||||
rpm_file = file.parent / f"{base_name}_rpm.csv"
|
||||
rpm_df = pd.read_csv(rpm_file).set_index("time_us", drop=False)
|
||||
fig, ax = plt.subplots(figsize=(12, 6))
|
||||
|
||||
# RPM
|
||||
ax.plot(rpm_df["time_us"] / 1_000_000, rpm_df["rpm"], label="RPM")
|
||||
ax.set_xlabel("Time (s)")
|
||||
ax.set_ylabel("RPM")
|
||||
ax.set_title(f"{base_name} RPM over Time")
|
||||
ax.grid(True)
|
||||
|
||||
# Crank on second y-axis
|
||||
ax2 = ax.twinx()
|
||||
ax2.plot(
|
||||
trimmed_df["time_us"] / 1_000_000, trimmed_df["crank"], alpha=0.4, label="Crank"
|
||||
)
|
||||
ax2.set_ylabel("Crank")
|
||||
ax2.set_ylim(-0.1, 1.1)
|
||||
|
||||
ax3 = ax.twinx()
|
||||
ax3.plot(
|
||||
trimmed_df["time_us"] / 1_000_000,
|
||||
trimmed_df["cam"],
|
||||
alpha=0.4,
|
||||
label="Cam",
|
||||
color="red",
|
||||
)
|
||||
ax3.set_ylabel("Cam")
|
||||
ax3.set_ylim(-0.1, 1.1)
|
||||
|
||||
fig.tight_layout()
|
||||
plt.show()
|
||||
plt.close(fig)
|
||||
@@ -67,7 +67,7 @@ for file in files:
|
||||
ax.set_xlabel("Time (s)")
|
||||
ax.set_ylabel("RPM")
|
||||
ax.set_title(f"{base_name} RPM over Time")
|
||||
ax.grid = True
|
||||
ax.grid(True)
|
||||
|
||||
fig.tight_layout()
|
||||
fig.savefig(image_output, dpi=300)
|
||||
|
||||
Reference in New Issue
Block a user