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

Add slice

parent 678a46f1
Branches
No related tags found
No related merge requests found
import sys import sys
import numpy as np import numpy as np
class Args: class Args:
def __init__(self, filename, func, var=None, mval=None, oname=None, out=None, ndim = None, min_y = None, max_y = None, title=None, levels=None): def __init__(self, filename, func, var=None, mval=None, oname=None, out=None, ndim = None, min_y = None, max_y = None, title=None, levels=None, plane_type = None, slice_position = 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)
...@@ -17,6 +17,8 @@ class Args: ...@@ -17,6 +17,8 @@ class Args:
self.min_y = min_y self.min_y = min_y
self.max_y = max_y self.max_y = max_y
self.levels = levels self.levels = levels
self.plane_type = plane_type
self.slice_position = slice_position
self.CorrVals() self.CorrVals()
......
...@@ -28,6 +28,8 @@ class Plotter: ...@@ -28,6 +28,8 @@ class Plotter:
self.min_y = None self.min_y = None
self.max_y = None self.max_y = None
self.min_max_var_vals = None self.min_max_var_vals = None
self.plane_type = None
self.slice_position = 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:
...@@ -42,7 +44,6 @@ class Plotter: ...@@ -42,7 +44,6 @@ class Plotter:
names = d.variable_names names = d.variable_names
var_names.append(np.array(names, dtype=object)) 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)): for i in range(1, len(var_names)):
if np.equal(var_names[0], var_names[i]).any() != True: if np.equal(var_names[0], var_names[i]).any() != True:
...@@ -67,6 +68,8 @@ class Plotter: ...@@ -67,6 +68,8 @@ class Plotter:
self.title = args.title self.title = args.title
self.min_y = args.min_y self.min_y = args.min_y
self.max_y = args.max_y self.max_y = args.max_y
self.plane_type = args.plane_type
self.slice_position = args.slice_position
if args.levels != None: if args.levels != None:
self.levels = args.levels self.levels = args.levels
...@@ -77,7 +80,6 @@ class Plotter: ...@@ -77,7 +80,6 @@ class Plotter:
self.if_save_result = kwargs.get('if_save_result', True) self.if_save_result = kwargs.get('if_save_result', True)
pData = [] pData = []
for fname in self.filename: for fname in self.filename:
p = ProcData(fname) p = ProcData(fname)
p.get_variable_names() p.get_variable_names()
...@@ -92,7 +94,7 @@ class Plotter: ...@@ -92,7 +94,7 @@ class Plotter:
self.ndim = 1 self.ndim = 1
elif args.func == self.plot_contour or args.func == self.ani_plot_contour: elif args.func == self.plot_contour or args.func == self.ani_plot_contour:
self.ndim = 2 self.ndim = 2
elif args.func == self.avg_plot: elif args.func == self.avg_plot or args.func == self.slice:
self.ndim = 3 self.ndim = 3
if self.var == None and len(self.file_column_names) != 0: if self.var == None and len(self.file_column_names) != 0:
...@@ -440,6 +442,75 @@ class Plotter: ...@@ -440,6 +442,75 @@ class Plotter:
elif self.ndim == 2: elif self.ndim == 2:
self.__plot_contour() self.__plot_contour()
def __find_closest(self, arr, val):
idx = np.abs(arr - val).argmin()
return idx
def __slice(self):
os.system("mkdir -p " + self.out)
if self.plane_type == 'xy':
x_name = self.file_column_names[0]
y_name = self.file_column_names[1]
z_name = self.file_column_names[2]
arr = self.file_data[0].data[z_name]
pos = self.__find_closest(arr, self.slice_position)
elif self.plane_type == 'yz':
x_name = self.file_column_names[1]
y_name = self.file_column_names[2]
z_name = self.file_column_names[0]
arr = self.file_data[0].data[z_name]
pos = self.__find_closest(arr, self.slice_position)
elif self.plane_type == 'xz':
x_name = self.file_column_names[0]
y_name = self.file_column_names[2]
z_name = self.file_column_names[1]
arr = self.file_data[0].data[z_name]
pos = self.__find_closest(arr, self.slice_position)
if self.oname == None:
fig_names = self.var
fig_end = ".png"
else:
fig_names = self.oname
fig_end = ""
for i in range(self.fig_count):
fig,ax=plt.subplots(1,1)
if self.title == None:
title = self.var[i]
else:
title = self.title
if self.plane_type == 'xy':
Z = self.file_data[0].data[self.var[i]][pos, :, :]
elif self.plane_type == 'xz':
Z = self.file_data[0].data[self.var[i]][:, pos, :]
elif self.plane_type == 'yz':
Z = self.file_data[0].data[self.var[i]][:, :, pos]
X = self.file_data[0].data[x_name]
Y = self.file_data[0].data[y_name]
cp = ax.contourf(X, Y, Z)
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_save_result: fig.savefig(self.out + fig_names[i] + fig_end)
def dump(self): def dump(self):
self.__dump() self.__dump()
...@@ -473,3 +544,7 @@ class Plotter: ...@@ -473,3 +544,7 @@ class Plotter:
def multiple_plot(self): def multiple_plot(self):
self.__get_min_max_ax() self.__get_min_max_ax()
self.__multiple_plot() self.__multiple_plot()
def slice(self):
self.__get_min_max_bar()
self.__slice()
\ No newline at end of file
...@@ -3,6 +3,7 @@ import os ...@@ -3,6 +3,7 @@ import os
import numpy as np import numpy as np
from .binSubfunctions import * from .binSubfunctions import *
import re import re
from decimal import Decimal
class ProcData: class ProcData:
def __init__(self, filename=None): def __init__(self, filename=None):
...@@ -118,7 +119,25 @@ class ProcData: ...@@ -118,7 +119,25 @@ class ProcData:
J = int(file_data[2].split(',')[1].split('=')[1]) J = int(file_data[2].split(',')[1].split('=')[1])
K = int(file_data[2].split(',')[2].split('=')[1]) K = int(file_data[2].split(',')[2].split('=')[1])
file_data = np.loadtxt(self.filename, dtype = float, skiprows=3, unpack=False, ndmin=2, encoding='utf-8') with open(self.filename, 'r') as f:
file_data = f.read().split('\n')
f.close()
skip_rows = 0
continue_flag = True
for row in file_data:
for word in row.split(' '):
try:
Decimal(word)
continue_flag = False
except:
break
if continue_flag == True:
skip_rows += 1
else:
break
file_data = np.loadtxt(self.filename, dtype = float, skiprows=skip_rows, unpack=False, ndmin=2, encoding='utf-8')
file_data = file_data.T file_data = file_data.T
if self.var == None: if self.var == None:
...@@ -135,9 +154,9 @@ class ProcData: ...@@ -135,9 +154,9 @@ class ProcData:
self.data[self.variable_names[0]] = file_data[0][0:I] self.data[self.variable_names[0]] = file_data[0][0:I]
if ndim == 2: if ndim == 2:
self.data[self.variable_names[1]] = file_data[1][: : I] self.data[self.variable_names[1]] = file_data[1][0: I * J : I]
elif ndim == 3: elif ndim == 3:
self.data[self.variable_names[1]] = file_data[1][: : I] self.data[self.variable_names[1]] = file_data[1][0: I * J : I]
self.data[self.variable_names[2]] = file_data[2][: : I * J] self.data[self.variable_names[2]] = file_data[2][: : I * J]
i = 0 i = 0
...@@ -154,7 +173,6 @@ class ProcData: ...@@ -154,7 +173,6 @@ class ProcData:
self.data['cy'] = J self.data['cy'] = J
self.data['cz'] = K self.data['cz'] = K
def __read_bin(self): def __read_bin(self):
f = open(self.filename,'rb') f = open(self.filename,'rb')
fid = read_int(f) fid = read_int(f)
...@@ -312,8 +330,6 @@ class ProcData: ...@@ -312,8 +330,6 @@ class ProcData:
self.var = column_names self.var = column_names
self.mval = mval self.mval = mval
# print(ndim, self.filename)
if filename_extension == '.plt': if filename_extension == '.plt':
self.__read_plt(ndim) self.__read_plt(ndim)
elif filename_extension == '.nsx': elif filename_extension == '.nsx':
......
...@@ -6,6 +6,7 @@ from .main import ani_plot ...@@ -6,6 +6,7 @@ from .main import ani_plot
from .main import plot_contour from .main import plot_contour
from .main import ani_plot_contour from .main import ani_plot_contour
from .main import avg_plot from .main import avg_plot
from .main import slice
from .main import plot_diff from .main import plot_diff
from .main import get_data from .main import get_data
from .main import multiple_plot from .main import multiple_plot
...@@ -66,6 +66,12 @@ def avg_plot(filename, out = './', oname = 'fig.png', var=[None], mval=[None]): ...@@ -66,6 +66,12 @@ def avg_plot(filename, out = './', oname = 'fig.png', 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.avg_plot() Plot.avg_plot()
def slice(filename, plane_type = 'xy', slice_position = 0, out = './', oname = [None], var=[None], mval=[None], min_y = None, max_y = None):
Plot = Plotter()
args = Args([filename], Plot.slice, var=var, mval=mval, oname=oname, out=out, plane_type=plane_type, slice_position=slice_position)
Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
Plot.slice()
def plot_diff(filename, ndim, out = './', oname = 'fig.png', var=[None], mval=[None]): def plot_diff(filename, ndim, out = './', oname = 'fig.png', var=[None], mval=[None]):
Plot = Plotter() Plot = Plotter()
args = Args(filename, Plot.plot_diff, var=var, mval=mval, oname=oname, out=out, ndim=ndim) args = Args(filename, Plot.plot_diff, var=var, mval=mval, oname=oname, out=out, ndim=ndim)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment