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

Add slice

parent 678a46f1
No related branches found
No related tags found
No related merge requests found
import sys
import numpy as np
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/":
print("Output directory name can't be equal to " + out)
sys.exit(-1)
......@@ -17,6 +17,8 @@ class Args:
self.min_y = min_y
self.max_y = max_y
self.levels = levels
self.plane_type = plane_type
self.slice_position = slice_position
self.CorrVals()
......
......@@ -28,6 +28,8 @@ class Plotter:
self.min_y = None
self.max_y = None
self.min_max_var_vals = None
self.plane_type = None
self.slice_position = None
def __check_arg_dim_equiv(self, args):
if args.var != None and args.mval != None:
......@@ -42,7 +44,6 @@ class Plotter:
names = d.variable_names
var_names.append(np.array(names, dtype=object))
if(len(var_names) > 1):
for i in range(1, len(var_names)):
if np.equal(var_names[0], var_names[i]).any() != True:
......@@ -67,6 +68,8 @@ class Plotter:
self.title = args.title
self.min_y = args.min_y
self.max_y = args.max_y
self.plane_type = args.plane_type
self.slice_position = args.slice_position
if args.levels != None:
self.levels = args.levels
......@@ -77,7 +80,6 @@ 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()
......@@ -92,7 +94,7 @@ class Plotter:
self.ndim = 1
elif args.func == self.plot_contour or args.func == self.ani_plot_contour:
self.ndim = 2
elif args.func == self.avg_plot:
elif args.func == self.avg_plot or args.func == self.slice:
self.ndim = 3
if self.var == None and len(self.file_column_names) != 0:
......@@ -440,6 +442,75 @@ class Plotter:
elif self.ndim == 2:
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):
self.__dump()
......@@ -472,4 +543,8 @@ class Plotter:
def multiple_plot(self):
self.__get_min_max_ax()
self.__multiple_plot()
\ No newline at end of file
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
import numpy as np
from .binSubfunctions import *
import re
from decimal import Decimal
class ProcData:
def __init__(self, filename=None):
......@@ -118,7 +119,25 @@ class ProcData:
J = int(file_data[2].split(',')[1].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
if self.var == None:
......@@ -135,9 +154,9 @@ class ProcData:
self.data[self.variable_names[0]] = file_data[0][0:I]
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:
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]
i = 0
......@@ -154,7 +173,6 @@ class ProcData:
self.data['cy'] = J
self.data['cz'] = K
def __read_bin(self):
f = open(self.filename,'rb')
fid = read_int(f)
......@@ -312,8 +330,6 @@ class ProcData:
self.var = column_names
self.mval = mval
# print(ndim, self.filename)
if filename_extension == '.plt':
self.__read_plt(ndim)
elif filename_extension == '.nsx':
......
......@@ -6,6 +6,7 @@ from .main import ani_plot
from .main import plot_contour
from .main import ani_plot_contour
from .main import avg_plot
from .main import slice
from .main import plot_diff
from .main import get_data
from .main import multiple_plot
......@@ -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.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]):
Plot = Plotter()
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.
Finish editing this message first!
Please register or to comment