def update_derivative(self, index): """ Recalculates the derivative at index and overwrites the data at that index. Recursively does this for all following derivatives because they all changed because they are all dependent on the previous dataset. Recursion will stop once the index of the derivative data does not exist Parameters ---------- index : int The index of the derivative data. Returns ------- None. """ if index in self.config_btns.keys(): x_dataset = [] y_dataset = [] for x, y in zip(self.x_datasets[index - 1], self.y_datasets[index - 1]): x_data, y_data = data_analysis.derivative( x, y, **self.config_btns[index][1]) x_dataset.append(x_data) y_dataset.append(y_data) self.x_datasets[index] = x_dataset self.y_datasets[index] = y_dataset self.plot_updates.append(self.__get_matrix_coordinates(index)) self.update_derivative(index + 1) # update all following derivative graphs
def new_derivative(self, _): """ Button callback for adding a new (derivative). This looks at the last dataset present and differentiates it. It then makes a new figure with new dimensions so that the derivative graph will be displayed. Parameters ---------- _ : any (not used) Necessary so that it is the proper architechture for a callback function. Returns ------- None. """ x_dataset = [] y_dataset = [] for x, y in zip(self.x_datasets[-1], self.y_datasets[-1]): x_data, y_data = data_analysis.derivative(x, y) x_dataset.append(x_data) y_dataset.append(y_data) self.allow_exit = False with self.mainloop_lock: plt.close(self.figure) self.new_figure(self.fig_rows, self.fig_columns + 1) self.add_derivative_dataset(x_dataset, y_dataset, self.labels_dataset[-1]) self.allow_exit = True
def update_plot_data(self, index): """ Recalculates the derivative at index and overwrites the data at that index. Recursively does this for all following derivatives because they all changed because they are all dependent on the previous dataset. Recursion will stop once the index of the derivative data does not exist Parameters ---------- index : int The index of the derivative data. Returns ------- None. """ if index < len(self.x_datasets) and index > 0: x_dataset = [] y_dataset = [] for x, y in zip(self.x_datasets[index - 1], self.y_datasets[index - 1]): x_data, y_data = data_analysis.derivative(x, y) if self.plot_configurations[index]["smooth"]: x_data, y_data = data_analysis.smooth_dataset( x_data, y_data, **self.plot_configurations[index]) x_dataset.append(x_data) y_dataset.append(y_data) self.x_datasets[index] = x_dataset self.y_datasets[index] = y_dataset self.plots_changed.append(index) self.update_plot_data(index + 1) # update all following derivative graphs elif index == 0: x_dataset = [] y_dataset = [] for i, dataset in enumerate( zip(self.x_datasets[0], self.y_datasets[0])): x_data = self.original_x[0][i] y_data = self.original_y[0][i] if self.plot_configurations[index]["smooth"]: x_data, y_data = data_analysis.smooth_dataset( x_data, y_data, **self.plot_configurations[0]) x_dataset.append(x_data) y_dataset.append(y_data) self.x_datasets[0] = x_dataset self.y_datasets[0] = y_dataset self.plots_changed.append(0) self.update_plot_data(index + 1) # update all following derivative graphs
def new_derivative(self): """ Creates a new derivative of the dataset Returns ------- None. """ x_dataset = [] y_dataset = [] for x, y in zip(self.x_datasets[-1], self.y_datasets[-1]): x_data, y_data = data_analysis.derivative(x, y) x_dataset.append(x_data) y_dataset.append(y_data) self.add_dataset(x_dataset, y_dataset, self.labels_dataset[-1])
9046, 9385, 9668, 9889, 10164, 10464, 10700, 11101, 11373, 11674, 11771, 12086, ] print(len(y_data)) x_data = range(20, len(y_data) + 20) x, y = data_analysis.derivative(x_data, y_data, smooth=False, iters=1) x1, y1 = data_analysis.derivative(x_data, y_data, smooth=True, iters=1) # interp = scipy.interpolate.interp1d(x_data, y_data, kind="linear") # x_interp = [] # y_interp = [] # for i in range(x_data[0], len(x_data) - 1): # x_interp.append(i) # y_interp.append(interp(i)) # dx = np.diff(x_interp) # dy = np.diff(y_interp) / dx figure, axes = plt.subplots(2, 1, squeeze=False) axes[0, 0].plot(x, y, color="red") axes[1, 0].plot(x1, y1, color="red")