diff --git a/rfg_vna_viewer.py b/rfg_vna_viewer.py index 4917745..7489e64 100644 --- a/rfg_vna_viewer.py +++ b/rfg_vna_viewer.py @@ -283,14 +283,40 @@ def make_update(reader, parser, assembler, curves, plots): fft_db = 20.0 * np.log10(fft_mag + 1e-12) c_fft.setData(fft_dist, fft_db) - # Lock axes after first sweep — freeze current Y ranges + # Lock axes after first sweep — compute ranges from data, then freeze if not state["axes_locked"]: state["axes_locked"] = True - for p in plots: - vr = p.viewRange() - p.disableAutoRange() - p.setXRange(vr[0][0], vr[0][1], padding=0) - p.setYRange(vr[1][0], vr[1][1], padding=0) + p_raw, p_ch, p_norm, p_ph, p_fft = plots + + fx0, fx1 = freqs_ghz[0], freqs_ghz[-1] + + # Row 0: raw amplitudes + y_all = np.concatenate([main_amp, ref_amplitude]) + p_raw.disableAutoRange() + p_raw.setXRange(fx0, fx1, padding=0) + p_raw.setYRange(float(y_all.min()), float(y_all.max()), padding=0.05) + + # Row 1: normalized ch1/ch2 + y_all = np.concatenate([norm_ch1, norm_ch2]) + p_ch.disableAutoRange() + p_ch.setXRange(fx0, fx1, padding=0) + p_ch.setYRange(float(y_all.min()), float(y_all.max()), padding=0.05) + + # Row 2: normalized amplitude + p_norm.disableAutoRange() + p_norm.setXRange(fx0, fx1, padding=0) + p_norm.setYRange(float(norm_amp.min()), float(norm_amp.max()), padding=0.05) + + # Row 3: phase + line + deviation + y_all = np.concatenate([phase, line, deviation]) + p_ph.disableAutoRange() + p_ph.setXRange(fx0, fx1, padding=0) + p_ph.setYRange(float(y_all.min()), float(y_all.max()), padding=0.05) + + # Row 4: FFT + p_fft.disableAutoRange() + p_fft.setXRange(float(fft_dist[0]), float(fft_dist[-1]), padding=0) + p_fft.setYRange(float(fft_db.min()), float(fft_db.max()), padding=0.05) return update