diff --git a/plotter/Plotter.py b/plotter/Plotter.py index 20accd89d5512536049fe73fd8277f69719626e2..8f7c79c9b871be87582ed2f9657dab9bfe9f0748 100755 --- a/plotter/Plotter.py +++ b/plotter/Plotter.py @@ -9,11 +9,12 @@ from .ProcData import ProcData import copy from matplotlib.cm import ScalarMappable + class Plotter: ani_pngs_dir = "plotter_lib_pngs/" def __init__(self): - self.ani_period = float(1./20.) + self.ani_period = float(1. / 20.) self.filename = None self.out = None self.oname = None @@ -42,9 +43,8 @@ class Plotter: for d in self.file_data: names = d.variable_names var_names.append(np.array(names, dtype=object)) - - - if(len(var_names) > 1): + + if (len(var_names) > 1): for i in range(1, len(var_names)): if np.equal(var_names[0], var_names[i]).any() != True: print("All files must have the same variable names") @@ -52,9 +52,8 @@ class Plotter: elif len(var_names) == 0: print("Undefined variable names") sys.exit(-1) - - self.file_column_names = var_names[0] + self.file_column_names = var_names[0] def set(self, args, **kwargs): self.__check_arg_dim_equiv(args) @@ -74,13 +73,13 @@ class Plotter: self.if_save_result = kwargs.get('if_save_result', True) pData = [] - + for fname in self.filename: p = ProcData(fname) p.get_variable_names() pData.append(p) - self.file_data = copy.deepcopy(pData) + self.file_data = copy.deepcopy(pData) self.__get_variable_names() if args.func != self.dump: @@ -98,7 +97,7 @@ class Plotter: for p in self.file_data: p.process_file(self.ndim, self.var, self.mval) self.fig_count = len(self.var) - + def __plot(self): os.system("mkdir -p " + self.out) x_name = self.file_column_names[0] @@ -113,16 +112,17 @@ class Plotter: else: plt.plot(self.file_data[0].data[x_name], self.file_data[0].data[y_name], linewidth=4) - plt.legend(self.var) plt.xlabel(x_name, fontsize=10, fontweight='bold') - if self.if_manual_plot: plt.show() - else: plt.close(fig) + if self.if_manual_plot: + plt.show() + else: + plt.close(fig) if self.if_save_result: fig.savefig(self.out + self.oname[0]) def __get_min_max_ax(self): - min_max_var_vals = {var : [] for var in self.var} + min_max_var_vals = {var: [] for var in self.var} for var in self.var: max_val = np.nanmax(self.file_data[0].data[var]) @@ -147,14 +147,13 @@ class Plotter: self.min_max_var_vals = np.array([min_val, max_val]) - def __ani_plot(self): if self.if_save_result: png_names = [] os.system("mkdir -p " + self.out) os.system("mkdir -p " + self.ani_pngs_dir) - names = natsort.natsorted(self.filename,reverse=False) + names = natsort.natsorted(self.filename, reverse=False) x_name = self.file_column_names[0] data_i = 0 @@ -197,7 +196,7 @@ class Plotter: for file_name in png_names: images.append(imageio.v2.imread(file_name)) - imageio.mimsave(self.oname[0], images, fps = 5, loop = 0) + imageio.mimsave(self.oname[0], images, fps=5, loop=0) shutil.rmtree(self.ani_pngs_dir) def __plot_contour(self): @@ -213,18 +212,18 @@ class Plotter: fig_end = "" if self.max_y == None: - max_val = {var:self.min_max_var_vals[var][1] for var in self.var} + max_val = {var: self.min_max_var_vals[var][1] for var in self.var} else: - max_val = {var:self.max_y[i] for var, i in zip(self.var, list(range(len(self.var))))} + max_val = {var: self.max_y[i] for var, i in zip(self.var, list(range(len(self.var))))} if self.min_y == None: - min_val = {var:self.min_max_var_vals[var][0] for var in self.var} + min_val = {var: self.min_max_var_vals[var][0] for var in self.var} else: - min_val = {var:self.min_y[i] for var, i in zip(self.var, list(range(len(self.var))))} - + min_val = {var: self.min_y[i] for var, i in zip(self.var, list(range(len(self.var))))} + for i in range(self.fig_count): - fig,ax=plt.subplots(1,1) - + fig, ax = plt.subplots(1, 1) + if self.title == None: title = self.var[i] else: @@ -233,9 +232,10 @@ class Plotter: X = self.file_data[0].data[x_name] Y = self.file_data[0].data[y_name] Z = self.file_data[0].data[self.var[i]] - - vmin = min_val[self.var[i]]; vmax = max_val[self.var[i]]; - + + vmin = min_val[self.var[i]]; + vmax = max_val[self.var[i]]; + levels = np.linspace(vmin, vmax, 25) if self.function == self.plot_diff: if self.transpose[i]: @@ -248,18 +248,20 @@ class Plotter: else: cp = ax.contourf(X, Y, Z, vmin=vmin, vmax=vmax, levels=levels) # fig.colorbar(ScalarMappable(norm=cp.norm, cmap=cp.cmap),ticks=range(min_val[self.var[i]], max_val[self.var[i]])) - fig.colorbar(cp) # Add a colorbar to a plot + fig.colorbar(cp) # Add a colorbar to a plot ax.set_title(title) ax.set_xlabel(x_name) ax.set_ylabel(y_name) - - if self.if_manual_plot: plt.show() - else: plt.close(fig) + + if self.if_manual_plot: + plt.show() + else: + plt.close(fig) if self.if_save_result: fig.savefig(self.out + fig_names[i] + fig_end) def __get_min_max_bar(self): - self.filename = natsort.natsorted(self.filename,reverse=False) - self.min_max_var_vals = {var : [] for var in self.var} + self.filename = natsort.natsorted(self.filename, reverse=False) + self.min_max_var_vals = {var: [] for var in self.var} for var in self.var: max_val = np.nanmax(self.file_data[0].data[var]) @@ -296,14 +298,14 @@ class Plotter: Y = self.file_data[0].data[y_name] if self.max_y == None: - max_val = {var:self.min_max_var_vals[var][1] for var in self.var} + max_val = {var: self.min_max_var_vals[var][1] for var in self.var} else: - max_val = {var:self.max_y[i] for var, i in zip(self.var, list(range(len(self.var))))} + max_val = {var: self.max_y[i] for var, i in zip(self.var, list(range(len(self.var))))} if self.min_y == None: - min_val = {var:self.min_max_var_vals[var][0] for var in self.var} + min_val = {var: self.min_max_var_vals[var][0] for var in self.var} else: - min_val = {var:self.min_y[i] for var, i in zip(self.var, list(range(len(self.var))))} + min_val = {var: self.min_y[i] for var, i in zip(self.var, list(range(len(self.var))))} # print(max_val) @@ -322,7 +324,7 @@ class Plotter: png_names = [] for data in self.file_data: - fig,ax=plt.subplots(1,1) + fig, ax = plt.subplots(1, 1) ax.set_title(title) ax.set_xlabel(x_name) ax.set_ylabel(y_name) @@ -332,21 +334,21 @@ class Plotter: cp = ax.contourf(Y, X, Z.T, vmin=min_val[var], vmax=max_val[var]) else: cp = ax.contourf(X, Y, Z, vmin=min_val[var], vmax=max_val[var]) - fig.colorbar(cp) # Add a colorbar to a plot + fig.colorbar(cp) # Add a colorbar to a plot plt.close(fig) figname = var + str(counter) fig.savefig(self.ani_pngs_dir + figname + '.png') name = self.ani_pngs_dir + figname + '.png' png_names.append(name) counter += 1 - + images = [] for file_name in png_names: images.append(imageio.v2.imread(file_name)) - imageio.mimsave(self.out + fig_names[i] + fig_end, images, fps = 5, loop=0) + imageio.mimsave(self.out + fig_names[i] + fig_end, images, fps=5, loop=0) i += 1 - + shutil.rmtree(self.ani_pngs_dir) def __avg(self, data, var_name): @@ -356,7 +358,7 @@ class Plotter: flat_matrix_data = np.zeros((cx * cy * cz)) flat_data = data[var_name].flatten() - + for k in range(cz): for j in range(cy): for i in range(cx): @@ -366,7 +368,6 @@ class Plotter: avg_data = np.average(matrix_data, axis=(1, 0)) return avg_data - def __avg_plot(self): os.system("mkdir -p " + self.out) fig = plt.figure() @@ -384,8 +385,10 @@ class Plotter: plt.legend(self.var) plt.xlabel(x_name, fontsize=10, fontweight='bold') - if self.if_manual_plot: plt.show() - else: plt.close(fig) + if self.if_manual_plot: + plt.show() + else: + plt.close(fig) if self.if_save_result: fig.savefig(self.out + self.oname[0]) def __dump(self): @@ -398,7 +401,7 @@ class Plotter: if self.file_data[0].data[name].shape != self.file_data[1].data[name].shape: print("Data dimensions do not match") sys.exit(-1) - + diff = {} for name in self.var: diff[name] = self.file_data[0].data[name] - self.file_data[1].data[name] @@ -420,7 +423,7 @@ class Plotter: self.__get_min_max_ax() elif self.ndim == 2: self.__get_min_max_bar() - + if self.ndim == 1: self.__plot() elif self.ndim == 2: @@ -452,6 +455,6 @@ class Plotter: def plot_diff(self): self.__plot_diff() - def get_data(self): + def get_data(self) -> list: return_data = [copy.deepcopy(data.data) for data in self.file_data] - return return_data \ No newline at end of file + return return_data diff --git a/plotter/__init__.py b/plotter/__init__.py index 6f6cd904dbe1fcb47fa7a0ae93806d1634f5b0f8..9d432d9497d46aabe71c06d9caeb49373eacd1d1 100755 --- a/plotter/__init__.py +++ b/plotter/__init__.py @@ -8,4 +8,5 @@ from .main import ani_plot_contour from .main import avg_plot from .main import plot_diff from .main import get_data +from .utils import utils diff --git a/plotter/main.py b/plotter/main.py index f8b15b6a50f831ffdb9ec3331fa8855c1c67ac71..74be31510a13bc254a42771652fa5085b24d6919 100755 --- a/plotter/main.py +++ b/plotter/main.py @@ -7,6 +7,7 @@ import os manual_plot=False save_result=True + def dump(filename, var=[None], mval=[None]): Plot = Plotter() args = Args([filename], Plot.dump, var, mval, oname=[None], out=[None]) @@ -71,4 +72,5 @@ def get_data(filename, ndim): args = Args([filename], Plot.get_data, ndim=ndim) Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result) data = Plot.get_data() - return data \ No newline at end of file + return data + diff --git a/plotter/utils.py b/plotter/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..b1495660426d85c995ec4d4cf2fa1c2c2d7149f4 --- /dev/null +++ b/plotter/utils.py @@ -0,0 +1,10 @@ +from .Plotter import Plotter + +class utils: + pole = 'russkoe' + + def __init__(self): + self.pl = Plotter() + + def plot_diff(self): + print('hello world')