diff --git a/plotter/Args.py b/plotter/Args.py index 7a588547c5c7365a98f64ed07448739ac180009e..2aa1d1a33c8deddf5af5fce42247932cb2d38cfe 100644 --- a/plotter/Args.py +++ b/plotter/Args.py @@ -1,7 +1,7 @@ import sys - +import numpy as np class Args: - def __init__(self, filename, func, var=[None], mval=[None], oname=[None], out=[None], ndim = None): + def __init__(self, filename, func, var=None, mval=None, oname=None, out=None, ndim = None, min_y = None, max_y = None, title=None): if out == "plotter_lib_pngs/": print("Output directory name can't be equal to " + out) sys.exit(-1) @@ -13,6 +13,9 @@ class Args: self.out = out self.func = func self.ndim = ndim + self.title = title + self.min_y = min_y + self.max_y = max_y self.CorrVals() @@ -30,4 +33,34 @@ class Args: if type(self.mval) is not list: self.mval = [self.mval] if None in self.mval: - self.mval = None \ No newline at end of file + self.mval = None + + if type(self.min_y) is not list: + self.min_y = [self.min_y] + if None in self.min_y: + self.min_y = None + + if type(self.max_y) is not list: + self.max_y = [self.max_y] + if None in self.max_y: + self.max_y = None + + # param_lists = [self.oname, self.var, self.mval, self.min_y, self.max_y] + # lens = [] + + # for param in param_lists: + # if param == None: + # continue + # if type(param) is not list: + # lens.append(1) + # else: + # lens.append(len(param)) + + # if len(lens) != 0: + # lens = np.array(lens, dtype = int) + # for i in range(1, len(lens)): + # if np.equal(lens[0], lens[i]).any() != True: + # print("Args fail") + # sys.exit(-1) + + \ No newline at end of file diff --git a/plotter/Plotter.py b/plotter/Plotter.py index 2f69efbf2303e6a3d2af607fd18c348dcd58d20a..f26c1671046802609937337f2d4bc267dcfc9275 100755 --- a/plotter/Plotter.py +++ b/plotter/Plotter.py @@ -12,14 +12,20 @@ class Plotter: ani_pngs_dir = "plotter_lib_pngs/" def __init__(self): - self.filename = "" - self.out = "" - self.oname = "" - self.var = "" - self.mval = "" - self.function = "" - self.variable_names = "" + self.filename = None + self.out = None + self.oname = None + self.var = None + self.mval = None + self.function = None + self.file_column_names = None self.title = None + self.file_data = None + self.plt_max_val = None + self.plt_min_val = None + self.min_y = None + self.max_y = None + self.min_max_var_vals = None def __check_arg_dim_equiv(self, args): if args.var != None and args.mval != None: @@ -30,7 +36,7 @@ class Plotter: def __get_variable_names(self): var_names = [] - for d in self.data: + for d in self.file_data: names = d.variable_names var_names.append(np.array(names, dtype=object)) @@ -44,13 +50,24 @@ class Plotter: print("Undefined variable names") sys.exit(-1) - self.variable_names = var_names[0] + self.file_column_names = var_names[0] def set(self, args, **kwargs): self.__check_arg_dim_equiv(args) self.filename = args.filename self.ndim = args.ndim + self.out = args.out + self.oname = args.oname + self.var = args.var + self.mval = args.mval + self.function = args.func + self.title = args.title + self.min_y = args.min_y + self.max_y = args.max_y + + self.if_manual_plot = kwargs.get('if_manual_plot', False) + self.if_save_result = kwargs.get('if_save_result', True) pData = [] @@ -59,17 +76,10 @@ class Plotter: p.get_variable_names() pData.append(p) - self.data = copy.deepcopy(pData) + self.file_data = copy.deepcopy(pData) self.__get_variable_names() if args.func != self.dump: - self.out = args.out - self.oname = args.oname - self.var = args.var - self.mval = args.mval - self.function = args.func - self.if_manual_plot = kwargs.get('if_manual_plot', False) - self.if_save_result = kwargs.get('if_save_result', True) if args.func == self.plot or args.func == self.ani_plot: self.ndim = 1 @@ -78,21 +88,21 @@ class Plotter: elif args.func == self.avg_plot: self.ndim = 3 - if self.var == None and len(self.variable_names) != 0: - self.var = [self.variable_names[i] for i in range(self.ndim, len(self.variable_names))] + if self.var == None and len(self.file_column_names) != 0: + self.var = [self.file_column_names[i] for i in range(self.ndim, len(self.file_column_names))] - for p in self.data: + 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.variable_names[0] + x_name = self.file_column_names[0] fig = plt.figure() for y_name in self.var: - plt.plot(self.data[0].data[x_name], self.data[0].data[y_name], linewidth=4) + 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') @@ -101,6 +111,36 @@ class Plotter: 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} + + i = 0 + for var in self.var: + max_val = self.file_data[i].data[var][0] + min_val = self.file_data[i].data[var][0] + + for data in self.file_data: + maval = np.max(data.data[var]) + mival = np.min(data.data[var]) + + if maval > max_val: + max_val = maval + if mival < min_val: + min_val = mival + + min_max_var_vals[var] = np.array([min_val, max_val]) + + i += 1 + + max_vals = np.array([min_max_var_vals[var][1] for var in self.var]) + min_vals = np.array([min_max_var_vals[var][0] for var in self.var]) + + max_val = np.max(max_vals) + min_val = np.min(min_vals) + + self.min_max_var_vals = np.array([min_val, max_val]) + + def __ani_plot(self): if self.if_save_result: png_names = [] @@ -108,20 +148,25 @@ class Plotter: os.system("mkdir -p " + self.ani_pngs_dir) names = natsort.natsorted(self.filename,reverse=False) - x_name = self.variable_names[0] + x_name = self.file_column_names[0] data_i = 0 - # max_val = -1e9 - # min_val = 1e9 + if self.max_y == None: + max_val = self.min_max_var_vals[1] + else: + max_val = self.max_y[0] - # for y_name in self.var: - # local_max = np. + if self.min_y == None: + min_val = self.min_max_var_vals[0] + else: + min_val = self.min_y[0] for datafile in names: fig = plt.figure() - + plt.ylim([min_val, max_val]) + for y_name in self.var: - plt.plot(self.data[data_i].data[x_name], self.data[data_i].data[y_name], linewidth=4) + plt.plot(self.file_data[data_i].data[x_name], self.file_data[data_i].data[y_name], linewidth=4) plt.legend(self.var) plt.xlabel(x_name, fontsize=10, fontweight='bold') @@ -143,8 +188,8 @@ class Plotter: def __plot_contour(self): os.system("mkdir -p " + self.out) - x_name = self.variable_names[0] - y_name = self.variable_names[1] + x_name = self.file_column_names[0] + y_name = self.file_column_names[1] if self.oname == None: fig_names = self.var @@ -161,9 +206,9 @@ class Plotter: else: title = self.title - X = self.data[0].data[x_name] - Y = self.data[0].data[y_name] - Z = self.data[0].data[self.var[i]] + 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]] cp = ax.contourf(X, Y, Z) fig.colorbar(cp) # Add a colorbar to a plot @@ -177,13 +222,14 @@ class Plotter: def __get_min_max_bar(self): self.filename = natsort.natsorted(self.filename,reverse=False) - self.vals = {var : [] for var in self.var} + self.min_max_var_vals = {var : [] for var in self.var} + i = 0 for var in self.var: - max_val = -1e9 - min_val = 1e9 + max_val = self.file_data[i].data[var][0][0] + min_val = self.file_data[i].data[var][0][0] - for data in self.data: + for data in self.file_data: maval = np.max(data.data[var]) mival = np.min(data.data[var]) @@ -192,7 +238,9 @@ class Plotter: if mival < min_val: min_val = mival - self.vals[var] = np.array([min_val, max_val]) + self.min_max_var_vals[var] = np.array([min_val, max_val]) + + i += 1 def __ani_plot_contour(self): if self.if_save_result: @@ -200,8 +248,8 @@ class Plotter: os.system("mkdir -p " + self.out) os.system("mkdir -p " + self.ani_pngs_dir) - x_name = self.variable_names[0] - y_name = self.variable_names[1] + x_name = self.file_column_names[0] + y_name = self.file_column_names[1] if self.oname == None: fig_names = self.var @@ -210,8 +258,20 @@ class Plotter: fig_names = self.oname fig_end = "" - X = self.data[0].data[x_name] - Y = self.data[0].data[y_name] + X = self.file_data[0].data[x_name] + 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} + else: + 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} + else: + min_val = {var:self.min_y[i] for var, i in zip(self.var, list(range(len(self.var))))} + + # print(max_val) i = 0 for var in self.var: @@ -223,14 +283,14 @@ class Plotter: counter = 0 png_names = [] - for data in self.data: + for data in self.file_data: fig,ax=plt.subplots(1,1) ax.set_title(title) ax.set_xlabel(x_name) ax.set_ylabel(y_name) Z = data.data[var] - cp = ax.contourf(X, Y, Z, vmin=self.vals[var][0], vmax=self.vals[var][1]) + cp = ax.contourf(X, Y, Z, vmin=min_val[var], vmax=max_val[var]) fig.colorbar(cp) # Add a colorbar to a plot plt.close(fig) figname = var + str(counter) @@ -269,11 +329,11 @@ class Plotter: def __avg_plot(self): os.system("mkdir -p " + self.out) fig = plt.figure() - x_name = self.variable_names[2] - x = self.data[0].data[x_name] + x_name = self.file_column_names[2] + x = self.file_data[0].data[x_name] for var in self.var: - avg_data = self.__avg(self.data[0].data, var) + avg_data = self.__avg(self.file_data[0].data, var) plt.plot(x, avg_data, linewidth=4) plt.legend(self.var) @@ -284,28 +344,28 @@ class Plotter: if self.if_save_result: fig.savefig(self.out + self.oname[0]) def __dump(self): - for variable_name in self.variable_names: + for variable_name in self.file_column_names: print(variable_name, end=' ') print('\n') def __plot_diff(self): - for name in self.variable_names: - if self.data[0].data[name].shape != self.data[1].data[name].shape: + for name in self.file_column_names: + 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.data[0].data[name] - self.data[1].data[name] + diff[name] = self.file_data[0].data[name] - self.file_data[1].data[name] - dim_variables = list(set(self.variable_names) - set(self.var)) + dim_variables = list(set(self.file_column_names) - set(self.var)) for name in dim_variables: - diff[name] = self.data[0].data[name] + diff[name] = self.file_data[0].data[name] diffProcData = ProcData() diffProcData.data = diff - self.data = [diffProcData] + self.file_data = [diffProcData] basename0 = os.path.basename(self.filename[0]) basename1 = os.path.basename(self.filename[1]) @@ -323,7 +383,7 @@ class Plotter: self.__plot() def ani_plot(self): - self.__get_min_max_bar() + self.__get_min_max_ax() self.__ani_plot() def avg_plot(self): @@ -341,6 +401,6 @@ class Plotter: def get_data(self): # filenames = [os.path.basename(name) for name in self.filename] - # return_data = {name : copy.deepcopy(data.data) for name, data in zip(filenames, self.data)} - return_data = [copy.deepcopy(data.data) for data in self.data] + # return_data = {name : copy.deepcopy(data.data) for name, data in zip(filenames, self.file_data)} + return_data = [copy.deepcopy(data.data) for data in self.file_data] return return_data \ No newline at end of file diff --git a/plotter/ProcData.py b/plotter/ProcData.py index b398062ae76b3651ad23b5cc7f20d962715a9b3b..8dd26462cb1a63f5a9c3478791bd5f2a9c2459ee 100755 --- a/plotter/ProcData.py +++ b/plotter/ProcData.py @@ -109,7 +109,6 @@ class ProcData: column_names = self.var if self.mval != None: - print(self.mval) for col, abs_val in zip(column_names, self.mval): check_variable_idx = np.where(self.variable_names == col)[0][0] idx = np.where(np.abs(file_data[check_variable_idx]) > abs_val)[0] diff --git a/plotter/main.py b/plotter/main.py index 2deb324dfa7eed28d1d28acd4c260dd9dd6ddffb..442747ce66cf0b494ad9a4ffe3cb316e2d13db3f 100755 --- a/plotter/main.py +++ b/plotter/main.py @@ -14,13 +14,13 @@ def dump(filename, var=[None], mval=[None]): Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result) Plot.dump() -def plot(filename, out = './', oname = 'fig.png', var=[None], mval=[None]): +def plot(filename, out = './', oname = 'fig.png', var=[None], mval=[None], min_y = None, max_y = None): Plot = Plotter() args = Args([filename], Plot.plot, var=var, mval=mval, oname=oname, out=out) Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result) Plot.plot() -def ani_plot(filename, out = './', oname = 'fig.gif', var=[None], mval=[None]): +def ani_plot(filename, out = './', oname = 'fig.gif', var=[None], mval=[None], min_y = None, max_y = None): pp = str(PurePath(filename).parent) + '/' name = str(PurePath(filename).name ) command = 'find ' + pp + ' -name ' + "'" + name + "'" @@ -30,7 +30,7 @@ def ani_plot(filename, out = './', oname = 'fig.gif', var=[None], mval=[None]): names = natsort.natsorted(out_res,reverse=False) Plot = Plotter() - args = Args(names, Plot.ani_plot, var=var, mval=mval, oname=oname, out=out) + args = Args(names, Plot.ani_plot, var=var, mval=mval, oname=oname, out=out, min_y=min_y, max_y=max_y) Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result) Plot.ani_plot() @@ -40,7 +40,7 @@ def plot_contour(filename, out = './', oname = [None], var=[None], mval=[None]): Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result) Plot.plot_contour() -def ani_plot_contour(filename, out = './', oname = [None], var=[None], mval=[None]): +def ani_plot_contour(filename, out = './', oname = [None], var=[None], mval=[None], min_y = None, max_y = None): pp = str(PurePath(filename).parent) + '/' name = str(PurePath(filename).name ) command = 'find ' + pp + ' -name ' + "'" + name + "'" @@ -50,7 +50,7 @@ def ani_plot_contour(filename, out = './', oname = [None], var=[None], mval=[Non names = natsort.natsorted(out_res,reverse=False) Plot = Plotter() - args = Args(names, Plot.ani_plot_contour, var=var, mval=mval, oname=oname, out=out) + args = Args(names, Plot.ani_plot_contour, var=var, mval=mval, oname=oname, out=out, min_y=min_y, max_y=max_y) Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result) Plot.ani_plot_contour()