diff --git a/mlair/plotting/data_insight_plotting.py b/mlair/plotting/data_insight_plotting.py index 45f5d3d6a451200d35c8f9085b31d3c394ae62b1..8a5630743b4ddc59feb7e989064d13f879ae0199 100644 --- a/mlair/plotting/data_insight_plotting.py +++ b/mlair/plotting/data_insight_plotting.py @@ -643,9 +643,9 @@ class PlotPeriodogram(AbstractPlotClass): # pragma: no cover plot_data_single = dict() plot_data_raw_single = dict() plot_data_mean_single = dict() + self.f_index = np.logspace(-3, 0 if self._sampling == "daily" else np.log10(24), 1000) raw_data_single = self._prepare_pgram_parallel_gen(generator, m, pos, use_multiprocessing) # raw_data_single = self._prepare_pgram_parallel_var(generator, m, pos, use_multiprocessing) - self.f_index = np.logspace(-3, 0 if self._sampling == "daily" else np.log10(24), 1000) for var in raw_data_single.keys(): pgram_com = [] pgram_mean = 0 @@ -705,14 +705,14 @@ class PlotPeriodogram(AbstractPlotClass): # pragma: no cover pool = multiprocessing.Pool( min([psutil.cpu_count(logical=False), len(generator), 16])) # use only physical cpus output = [ - pool.apply_async(f_proc_2, args=(g, m, pos, self.variables_dim, self.time_dim)) + pool.apply_async(f_proc_2, args=(g, m, pos, self.variables_dim, self.time_dim, self.f_index)) for g in generator] for i, p in enumerate(output): res.append(p.get()) pool.close() else: for g in generator: - res.append(f_proc_2(g, m, pos, self.variables_dim, self.time_dim)) + res.append(f_proc_2(g, m, pos, self.variables_dim, self.time_dim, self.f_index)) for res_dict in res: for k, v in res_dict.items(): if k not in raw_data_single.keys(): @@ -735,7 +735,7 @@ class PlotPeriodogram(AbstractPlotClass): # pragma: no cover """ ax.set_yscale('log') ax.set_xscale('log') - ax.set_ylabel("power", fontsize='x-large') + ax.set_ylabel("power spectral density", fontsize='x-large') # unit depends on variable: [unit^2 day^-1] ax.set_xlabel("frequency $[day^{-1}$]", fontsize='x-large') lims = ax.get_ylim() self._add_annotation_line(ax, [1, 2, 3], 365.25, lims, "yr") # per year @@ -826,14 +826,16 @@ class PlotPeriodogram(AbstractPlotClass): # pragma: no cover plt.close('all') -def f_proc(var, d_var): # pragma: no cover +def f_proc(var, d_var, f_index): # pragma: no cover var_str = str(var) t = (d_var.datetime - d_var.datetime[0]).astype("timedelta64[h]").values / np.timedelta64(1, "D") - f, pgram = LombScargle(t, d_var.values.flatten(), nterms=1).autopower() - return var_str, f, pgram + pgram = LombScargle(t, d_var.values.flatten(), nterms=1, normalization="psd").power(f_index) + # f, pgram = LombScargle(t, d_var.values.flatten(), nterms=1, normalization="psd").autopower() + return var_str, f_index, pgram + -def f_proc_2(g, m, pos, variables_dim, time_dim): # pragma: no cover +def f_proc_2(g, m, pos, variables_dim, time_dim, f_index): # pragma: no cover raw_data_single = dict() if m == 0: d = g.id_class._data @@ -844,7 +846,7 @@ def f_proc_2(g, m, pos, variables_dim, time_dim): # pragma: no cover d = d[pos] if isinstance(d, tuple) else d for var in d[variables_dim].values: d_var = d.loc[{variables_dim: var}].squeeze().dropna(time_dim) - var_str, f, pgram = f_proc(var, d_var) + var_str, f, pgram = f_proc(var, d_var, f_index) raw_data_single[var_str] = [(f, pgram)] return raw_data_single