Skip to content
Snippets Groups Projects
Commit bfac8439 authored by 数学の武士's avatar 数学の武士
Browse files

Add min max vals ani plot vals

parent 8335e76c
No related branches found
No related tags found
No related merge requests found
import sys import sys
import numpy as np
class Args: 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/": if out == "plotter_lib_pngs/":
print("Output directory name can't be equal to " + out) print("Output directory name can't be equal to " + out)
sys.exit(-1) sys.exit(-1)
...@@ -13,6 +13,9 @@ class Args: ...@@ -13,6 +13,9 @@ class Args:
self.out = out self.out = out
self.func = func self.func = func
self.ndim = ndim self.ndim = ndim
self.title = title
self.min_y = min_y
self.max_y = max_y
self.CorrVals() self.CorrVals()
...@@ -31,3 +34,33 @@ class Args: ...@@ -31,3 +34,33 @@ class Args:
self.mval = [self.mval] self.mval = [self.mval]
if None in self.mval: if None in self.mval:
self.mval = None 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
...@@ -12,14 +12,20 @@ class Plotter: ...@@ -12,14 +12,20 @@ class Plotter:
ani_pngs_dir = "plotter_lib_pngs/" ani_pngs_dir = "plotter_lib_pngs/"
def __init__(self): def __init__(self):
self.filename = "" self.filename = None
self.out = "" self.out = None
self.oname = "" self.oname = None
self.var = "" self.var = None
self.mval = "" self.mval = None
self.function = "" self.function = None
self.variable_names = "" self.file_column_names = None
self.title = 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): def __check_arg_dim_equiv(self, args):
if args.var != None and args.mval != None: if args.var != None and args.mval != None:
...@@ -30,7 +36,7 @@ class Plotter: ...@@ -30,7 +36,7 @@ class Plotter:
def __get_variable_names(self): def __get_variable_names(self):
var_names = [] var_names = []
for d in self.data: for d in self.file_data:
names = d.variable_names names = d.variable_names
var_names.append(np.array(names, dtype=object)) var_names.append(np.array(names, dtype=object))
...@@ -44,13 +50,24 @@ class Plotter: ...@@ -44,13 +50,24 @@ class Plotter:
print("Undefined variable names") print("Undefined variable names")
sys.exit(-1) sys.exit(-1)
self.variable_names = var_names[0] self.file_column_names = var_names[0]
def set(self, args, **kwargs): def set(self, args, **kwargs):
self.__check_arg_dim_equiv(args) self.__check_arg_dim_equiv(args)
self.filename = args.filename self.filename = args.filename
self.ndim = args.ndim 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 = [] pData = []
...@@ -59,17 +76,10 @@ class Plotter: ...@@ -59,17 +76,10 @@ class Plotter:
p.get_variable_names() p.get_variable_names()
pData.append(p) pData.append(p)
self.data = copy.deepcopy(pData) self.file_data = copy.deepcopy(pData)
self.__get_variable_names() self.__get_variable_names()
if args.func != self.dump: 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: if args.func == self.plot or args.func == self.ani_plot:
self.ndim = 1 self.ndim = 1
...@@ -78,21 +88,21 @@ class Plotter: ...@@ -78,21 +88,21 @@ class Plotter:
elif args.func == self.avg_plot: elif args.func == self.avg_plot:
self.ndim = 3 self.ndim = 3
if self.var == None and len(self.variable_names) != 0: if self.var == None and len(self.file_column_names) != 0:
self.var = [self.variable_names[i] for i in range(self.ndim, len(self.variable_names))] 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) p.process_file(self.ndim, self.var, self.mval)
self.fig_count = len(self.var) self.fig_count = len(self.var)
def __plot(self): def __plot(self):
os.system("mkdir -p " + self.out) os.system("mkdir -p " + self.out)
x_name = self.variable_names[0] x_name = self.file_column_names[0]
fig = plt.figure() fig = plt.figure()
for y_name in self.var: 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.legend(self.var)
plt.xlabel(x_name, fontsize=10, fontweight='bold') plt.xlabel(x_name, fontsize=10, fontweight='bold')
...@@ -101,6 +111,36 @@ class Plotter: ...@@ -101,6 +111,36 @@ class Plotter:
else: plt.close(fig) else: plt.close(fig)
if self.if_save_result: fig.savefig(self.out + self.oname[0]) 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): def __ani_plot(self):
if self.if_save_result: if self.if_save_result:
png_names = [] png_names = []
...@@ -108,20 +148,25 @@ class Plotter: ...@@ -108,20 +148,25 @@ class Plotter:
os.system("mkdir -p " + self.ani_pngs_dir) 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.variable_names[0] x_name = self.file_column_names[0]
data_i = 0 data_i = 0
# max_val = -1e9 if self.max_y == None:
# min_val = 1e9 max_val = self.min_max_var_vals[1]
else:
max_val = self.max_y[0]
# for y_name in self.var: if self.min_y == None:
# local_max = np. min_val = self.min_max_var_vals[0]
else:
min_val = self.min_y[0]
for datafile in names: for datafile in names:
fig = plt.figure() fig = plt.figure()
plt.ylim([min_val, max_val])
for y_name in self.var: 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.legend(self.var)
plt.xlabel(x_name, fontsize=10, fontweight='bold') plt.xlabel(x_name, fontsize=10, fontweight='bold')
...@@ -143,8 +188,8 @@ class Plotter: ...@@ -143,8 +188,8 @@ class Plotter:
def __plot_contour(self): def __plot_contour(self):
os.system("mkdir -p " + self.out) os.system("mkdir -p " + self.out)
x_name = self.variable_names[0] x_name = self.file_column_names[0]
y_name = self.variable_names[1] y_name = self.file_column_names[1]
if self.oname == None: if self.oname == None:
fig_names = self.var fig_names = self.var
...@@ -161,9 +206,9 @@ class Plotter: ...@@ -161,9 +206,9 @@ class Plotter:
else: else:
title = self.title title = self.title
X = self.data[0].data[x_name] X = self.file_data[0].data[x_name]
Y = self.data[0].data[y_name] Y = self.file_data[0].data[y_name]
Z = self.data[0].data[self.var[i]] Z = self.file_data[0].data[self.var[i]]
cp = ax.contourf(X, Y, Z) cp = ax.contourf(X, Y, Z)
fig.colorbar(cp) # Add a colorbar to a plot fig.colorbar(cp) # Add a colorbar to a plot
...@@ -177,13 +222,14 @@ class Plotter: ...@@ -177,13 +222,14 @@ class Plotter:
def __get_min_max_bar(self): def __get_min_max_bar(self):
self.filename = natsort.natsorted(self.filename,reverse=False) 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: for var in self.var:
max_val = -1e9 max_val = self.file_data[i].data[var][0][0]
min_val = 1e9 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]) maval = np.max(data.data[var])
mival = np.min(data.data[var]) mival = np.min(data.data[var])
...@@ -192,7 +238,9 @@ class Plotter: ...@@ -192,7 +238,9 @@ class Plotter:
if mival < min_val: if mival < min_val:
min_val = mival 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): def __ani_plot_contour(self):
if self.if_save_result: if self.if_save_result:
...@@ -200,8 +248,8 @@ class Plotter: ...@@ -200,8 +248,8 @@ class Plotter:
os.system("mkdir -p " + self.out) os.system("mkdir -p " + self.out)
os.system("mkdir -p " + self.ani_pngs_dir) os.system("mkdir -p " + self.ani_pngs_dir)
x_name = self.variable_names[0] x_name = self.file_column_names[0]
y_name = self.variable_names[1] y_name = self.file_column_names[1]
if self.oname == None: if self.oname == None:
fig_names = self.var fig_names = self.var
...@@ -210,8 +258,20 @@ class Plotter: ...@@ -210,8 +258,20 @@ class Plotter:
fig_names = self.oname fig_names = self.oname
fig_end = "" fig_end = ""
X = self.data[0].data[x_name] X = self.file_data[0].data[x_name]
Y = self.data[0].data[y_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 i = 0
for var in self.var: for var in self.var:
...@@ -223,14 +283,14 @@ class Plotter: ...@@ -223,14 +283,14 @@ class Plotter:
counter = 0 counter = 0
png_names = [] png_names = []
for data in self.data: for data in self.file_data:
fig,ax=plt.subplots(1,1) fig,ax=plt.subplots(1,1)
ax.set_title(title) ax.set_title(title)
ax.set_xlabel(x_name) ax.set_xlabel(x_name)
ax.set_ylabel(y_name) ax.set_ylabel(y_name)
Z = data.data[var] 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 fig.colorbar(cp) # Add a colorbar to a plot
plt.close(fig) plt.close(fig)
figname = var + str(counter) figname = var + str(counter)
...@@ -269,11 +329,11 @@ class Plotter: ...@@ -269,11 +329,11 @@ class Plotter:
def __avg_plot(self): def __avg_plot(self):
os.system("mkdir -p " + self.out) os.system("mkdir -p " + self.out)
fig = plt.figure() fig = plt.figure()
x_name = self.variable_names[2] x_name = self.file_column_names[2]
x = self.data[0].data[x_name] x = self.file_data[0].data[x_name]
for var in self.var: 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.plot(x, avg_data, linewidth=4)
plt.legend(self.var) plt.legend(self.var)
...@@ -284,28 +344,28 @@ class Plotter: ...@@ -284,28 +344,28 @@ class Plotter:
if self.if_save_result: fig.savefig(self.out + self.oname[0]) if self.if_save_result: fig.savefig(self.out + self.oname[0])
def __dump(self): def __dump(self):
for variable_name in self.variable_names: for variable_name in self.file_column_names:
print(variable_name, end=' ') print(variable_name, end=' ')
print('\n') print('\n')
def __plot_diff(self): def __plot_diff(self):
for name in self.variable_names: for name in self.file_column_names:
if self.data[0].data[name].shape != self.data[1].data[name].shape: if self.file_data[0].data[name].shape != self.file_data[1].data[name].shape:
print("Data dimensions do not match") print("Data dimensions do not match")
sys.exit(-1) sys.exit(-1)
diff = {} diff = {}
for name in self.var: 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: for name in dim_variables:
diff[name] = self.data[0].data[name] diff[name] = self.file_data[0].data[name]
diffProcData = ProcData() diffProcData = ProcData()
diffProcData.data = diff diffProcData.data = diff
self.data = [diffProcData] self.file_data = [diffProcData]
basename0 = os.path.basename(self.filename[0]) basename0 = os.path.basename(self.filename[0])
basename1 = os.path.basename(self.filename[1]) basename1 = os.path.basename(self.filename[1])
...@@ -323,7 +383,7 @@ class Plotter: ...@@ -323,7 +383,7 @@ class Plotter:
self.__plot() self.__plot()
def ani_plot(self): def ani_plot(self):
self.__get_min_max_bar() self.__get_min_max_ax()
self.__ani_plot() self.__ani_plot()
def avg_plot(self): def avg_plot(self):
...@@ -341,6 +401,6 @@ class Plotter: ...@@ -341,6 +401,6 @@ class Plotter:
def get_data(self): def get_data(self):
# filenames = [os.path.basename(name) for name in self.filename] # 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 = {name : copy.deepcopy(data.data) for name, data in zip(filenames, self.file_data)}
return_data = [copy.deepcopy(data.data) for data in self.data] return_data = [copy.deepcopy(data.data) for data in self.file_data]
return return_data return return_data
\ No newline at end of file
...@@ -109,7 +109,6 @@ class ProcData: ...@@ -109,7 +109,6 @@ class ProcData:
column_names = self.var column_names = self.var
if self.mval != None: if self.mval != None:
print(self.mval)
for col, abs_val in zip(column_names, self.mval): for col, abs_val in zip(column_names, self.mval):
check_variable_idx = np.where(self.variable_names == col)[0][0] check_variable_idx = np.where(self.variable_names == col)[0][0]
idx = np.where(np.abs(file_data[check_variable_idx]) > abs_val)[0] idx = np.where(np.abs(file_data[check_variable_idx]) > abs_val)[0]
......
...@@ -14,13 +14,13 @@ def dump(filename, var=[None], mval=[None]): ...@@ -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.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
Plot.dump() 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() Plot = Plotter()
args = Args([filename], Plot.plot, var=var, mval=mval, oname=oname, out=out) 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.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
Plot.plot() 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) + '/' pp = str(PurePath(filename).parent) + '/'
name = str(PurePath(filename).name ) name = str(PurePath(filename).name )
command = 'find ' + pp + ' -name ' + "'" + name + "'" command = 'find ' + pp + ' -name ' + "'" + name + "'"
...@@ -30,7 +30,7 @@ def ani_plot(filename, out = './', oname = 'fig.gif', var=[None], mval=[None]): ...@@ -30,7 +30,7 @@ def ani_plot(filename, out = './', oname = 'fig.gif', var=[None], mval=[None]):
names = natsort.natsorted(out_res,reverse=False) names = natsort.natsorted(out_res,reverse=False)
Plot = Plotter() 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.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
Plot.ani_plot() Plot.ani_plot()
...@@ -40,7 +40,7 @@ def plot_contour(filename, out = './', oname = [None], var=[None], mval=[None]): ...@@ -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.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
Plot.plot_contour() 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) + '/' pp = str(PurePath(filename).parent) + '/'
name = str(PurePath(filename).name ) name = str(PurePath(filename).name )
command = 'find ' + pp + ' -name ' + "'" + name + "'" command = 'find ' + pp + ' -name ' + "'" + name + "'"
...@@ -50,7 +50,7 @@ def ani_plot_contour(filename, out = './', oname = [None], var=[None], mval=[Non ...@@ -50,7 +50,7 @@ def ani_plot_contour(filename, out = './', oname = [None], var=[None], mval=[Non
names = natsort.natsorted(out_res,reverse=False) names = natsort.natsorted(out_res,reverse=False)
Plot = Plotter() 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.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
Plot.ani_plot_contour() Plot.ani_plot_contour()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment