diff --git a/RFG_ADC_dataplotter.py b/RFG_ADC_dataplotter.py index 17148fd..6bc43a7 100755 --- a/RFG_ADC_dataplotter.py +++ b/RFG_ADC_dataplotter.py @@ -459,9 +459,10 @@ def main(): freq_shared: Optional[np.ndarray] = None # Параметры контраста водопада спектров spec_clip = _parse_spec_clip(getattr(args, "spec_clip", None)) - # Ползунки управления Y для B-scan + # Ползунки управления Y для B-scan и контрастом ymin_slider = None ymax_slider = None + contrast_slider = None # Линейный график последнего свипа line_obj, = ax_line.plot([], [], lw=1) @@ -520,12 +521,14 @@ def main(): ax_spec.tick_params(axis="x", labelbottom=False) except Exception: pass - # Слайдеры для управления осью Y B-scan (мин/макс) + # Слайдеры для управления осью Y B-scan (мин/макс) и контрастом try: ax_smin = fig.add_axes([0.92, 0.55, 0.02, 0.35]) ax_smax = fig.add_axes([0.95, 0.55, 0.02, 0.35]) + ax_sctr = fig.add_axes([0.98, 0.55, 0.02, 0.35]) ymin_slider = Slider(ax_smin, "Y min", 0, max(1, fft_bins - 1), valinit=0, valstep=1, orientation="vertical") ymax_slider = Slider(ax_smax, "Y max", 0, max(1, fft_bins - 1), valinit=max(1, fft_bins - 1), valstep=1, orientation="vertical") + contrast_slider = Slider(ax_sctr, "Int max", 0, 100, valinit=100, valstep=1, orientation="vertical") def _on_ylim_change(_val): try: @@ -538,6 +541,8 @@ def main(): ymin_slider.on_changed(_on_ylim_change) ymax_slider.on_changed(_on_ylim_change) + # Контраст влияет на верхнюю границу цветовой шкалы (процент от авто-диапазона) + contrast_slider.on_changed(lambda _v: fig.canvas.draw_idle()) except Exception: pass @@ -739,7 +744,13 @@ def main(): if y_min_fft is not None and y_max_fft is not None and np.isfinite(y_min_fft) and np.isfinite(y_max_fft) and y_min_fft != y_max_fft: vmin_v, vmax_v = y_min_fft, y_max_fft if vmin_v is not None and vmax_v is not None and vmin_v != vmax_v: - img_fft_obj.set_clim(vmin=vmin_v, vmax=vmax_v) + # Применим скалирование контрастом (верхняя граница) + try: + c = float(contrast_slider.val) / 100.0 if contrast_slider is not None else 1.0 + except Exception: + c = 1.0 + vmax_eff = vmin_v + c * (vmax_v - vmin_v) + img_fft_obj.set_clim(vmin=vmin_v, vmax=vmax_eff) # Возвращаем обновлённые артисты return (line_obj, img_obj, fft_line_obj, img_fft_obj)