diff --git a/plotter/Args.py b/plotter/Args.py
index 4a215ec290945a4d3a8d7d995e98484cea53ea4e..e52ec38366de994dbe1c6639e3f0502a9c95d4d8 100644
--- a/plotter/Args.py
+++ b/plotter/Args.py
@@ -1,11 +1,12 @@
 class Args:
-    def __init__(self, filename, func, var=[None], mval=[None], oname=[None], out=[None]):
+    def __init__(self, filename, func, var=[None], mval=[None], oname=[None], out=[None], ndim = None):
         self.filename = filename
         self.var = var
         self.mval = mval
         self.oname = oname
         self.out = out
         self.func = func
+        self.ndim = ndim
 
         self.CorrVals()
 
diff --git a/plotter/Plotter.py b/plotter/Plotter.py
index 48bbe3e182c50c6ade3a4d069f62b99f63b35ded..2f69efbf2303e6a3d2af607fd18c348dcd58d20a 100755
--- a/plotter/Plotter.py
+++ b/plotter/Plotter.py
@@ -19,6 +19,7 @@ class Plotter:
         self.mval = ""
         self.function = ""
         self.variable_names = ""
+        self.title = None
 
     def __check_arg_dim_equiv(self, args):
         if args.var != None and args.mval != None:
@@ -49,6 +50,7 @@ class Plotter:
     def set(self, args, **kwargs):
         self.__check_arg_dim_equiv(args)
         self.filename = args.filename
+        self.ndim = args.ndim
 
         pData = []
         
@@ -57,7 +59,7 @@ class Plotter:
             p.get_variable_names()
             pData.append(p)
 
-        self.data = copy.deepcopy(pData)  
+        self.data = copy.deepcopy(pData) 
         self.__get_variable_names()
 
         if args.func != self.dump:
@@ -70,32 +72,20 @@ class Plotter:
             self.if_save_result = kwargs.get('if_save_result', True)
 
             if args.func == self.plot or args.func == self.ani_plot:
-                ndim = 1
-                if self.var == None and len(self.variable_names) != 0:
-                    self.var = [self.variable_names[i] for i in range(ndim, len(self.variable_names))]
-                for p in self.data:
-                    p.process_file(ndim, self.var, self.mval)
-
+                self.ndim = 1
             elif args.func == self.plot_contour or args.func == self.ani_plot_contour:
-                ndim = 2
-                if self.var == None and len(self.variable_names) != 0:
-                    self.var = [self.variable_names[i] for i in range(ndim, len(self.variable_names))]
-                for p in self.data:
-                    p.process_file(ndim, self.var, self.mval)
-
+                self.ndim = 2
             elif args.func == self.avg_plot:
-                ndim = 3
-                if self.var == None and len(self.variable_names) != 0:
-                    self.var = [self.variable_names[i] for i in range(ndim, len(self.variable_names))]
-                for p in self.data:
-                    p.process_file(ndim, self.var, self.mval)
-
-            if self.var == None:
-                self.fig_count = len(self.variable_names) - ndim
-            else:
-                self.fig_count = len(self.var)
+                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))]
+
+            for p in self.data:
+                p.process_file(self.ndim, self.var, self.mval)
+            self.fig_count = len(self.var)
     
-    def __plot_plt(self):
+    def __plot(self):
         os.system("mkdir -p " + self.out)
         x_name = self.variable_names[0]
 
@@ -121,6 +111,12 @@ class Plotter:
             x_name = self.variable_names[0]
             data_i = 0
 
+            # max_val = -1e9
+            # min_val = 1e9
+
+            # for y_name in self.var:
+            #     local_max = np.
+
             for datafile in names:
                 fig = plt.figure()
 
@@ -159,7 +155,11 @@ class Plotter:
         
         for i in range(self.fig_count):
             fig,ax=plt.subplots(1,1)
-            title = self.var[i]
+
+            if self.title == None:
+                title = self.var[i]
+            else:
+                title = self.title
 
             X = self.data[0].data[x_name]
             Y = self.data[0].data[y_name]
@@ -215,7 +215,11 @@ class Plotter:
 
             i = 0
             for var in self.var:
-                title = var
+                if self.title == None:
+                    title = var
+                else:
+                    title = self.title
+
                 counter = 0
                 png_names = []
 
@@ -285,23 +289,41 @@ class Plotter:
         print('\n')
 
     def __plot_diff(self):
-        if self.data[0].data.shape != self.data[1].data.shape:
-            print("Data dimensions do not match")
-            sys.exit(-1)
+        for name in self.variable_names:
+            if self.data[0].data[name].shape != self.data[1].data[name].shape:
+                print("Data dimensions do not match")
+                sys.exit(-1)
         
         diff = {}
-        diff[self.var] = self.data[0][self.var] - self.data[1][self.var]
+        for name in self.var:
+            diff[name] = self.data[0].data[name] - self.data[1].data[name]
+
         dim_variables = list(set(self.variable_names) - set(self.var))
 
+        for name in dim_variables:
+            diff[name] = self.data[0].data[name]
 
+        diffProcData = ProcData()
+        diffProcData.data = diff
+        self.data = [diffProcData]
+
+        basename0 = os.path.basename(self.filename[0])
+        basename1 = os.path.basename(self.filename[1])
+        self.title = str(basename0) + ' - ' + str(basename1)
+        
+        if self.ndim == 1:
+            self.__plot()
+        elif self.ndim == 2:
+            self.__plot_contour()
 
     def dump(self):
         self.__dump()
 
     def plot(self):
-        self.__plot_plt()
+        self.__plot()
 
     def ani_plot(self):
+        self.__get_min_max_bar()
         self.__ani_plot()
 
     def avg_plot(self):
@@ -315,4 +337,10 @@ class Plotter:
         self.__ani_plot_contour()
 
     def plot_diff(self):
-        self.__plot_diff()
\ No newline at end of file
+        self.__plot_diff()
+
+    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 return_data
\ No newline at end of file
diff --git a/plotter/ProcData.py b/plotter/ProcData.py
index c340654194ee2a214ad0fc489f1cea0b30b98266..b398062ae76b3651ad23b5cc7f20d962715a9b3b 100755
--- a/plotter/ProcData.py
+++ b/plotter/ProcData.py
@@ -4,7 +4,7 @@ import numpy as np
 from .binSubfunctions import *
 
 class ProcData:
-    def __init__(self, filename):
+    def __init__(self, filename=None):
         self.filename = filename
         self.data = {}
         self.nse_read_bin_data = {}
diff --git a/plotter/__init__.py b/plotter/__init__.py
index 7c9b81a9840b4c48248fcbb9f38118069cdc8811..6f6cd904dbe1fcb47fa7a0ae93806d1634f5b0f8 100755
--- a/plotter/__init__.py
+++ b/plotter/__init__.py
@@ -6,4 +6,6 @@ from .main import ani_plot
 from .main import plot_contour
 from .main import ani_plot_contour
 from .main import avg_plot
+from .main import plot_diff
+from .main import get_data
 
diff --git a/plotter/main.py b/plotter/main.py
index d18e2b2d85f40171ca823186e1c5e21521fdf40b..5680c7ee3dd9792f891dd150f0aa5e003d103b67 100755
--- a/plotter/main.py
+++ b/plotter/main.py
@@ -4,7 +4,7 @@ from pathlib import PurePath
 import natsort
 import os
 
-manual_plot=True
+manual_plot=False
 save_result=True
 
 def dump(filename, var=[None], mval=[None]):
@@ -58,4 +58,17 @@ def avg_plot(filename, out = './', oname = 'fig.png', var=[None], mval=[None]):
     Plot = Plotter()
     args = Args([filename], Plot.avg_plot, var=var, mval=mval, oname=oname, out=out)
     Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
-    Plot.avg_plot()
\ No newline at end of file
+    Plot.avg_plot()
+
+def plot_diff(filename, out = './', oname = 'fig.png', var=[None], mval=[None], ndim = 1):
+    Plot = Plotter()
+    args = Args(filename, Plot.plot_diff, var=var, mval=mval, oname=oname, out=out, ndim=ndim)
+    Plot.set(args, if_manual_plot=manual_plot, if_save_result=save_result)
+    Plot.plot_diff()
+
+def get_data(filename, ndim):
+    Plot = Plotter()
+    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