def show(mesh=None, data=None, **kwargs): """Mesh and model visualization. Syntactic sugar to show a mesh with data. Forwards to :py:mod:`pygimli.viewer.showMesh` or :py:mod:`pygimli.viewer.mayaview.showMesh3D` to show most of the typical 2D and 3D content. See tutorials and examples for usage hints. An empty show call create an empty ax window. Parameters ---------- mesh : :gimliapi:`GIMLI::Mesh` or list of meshes 2D or 3D GIMLi mesh **kwargs : * fitView : bool [True] Scale x and y limits to match the view. * ax : axe [None] Matplotlib axes object. Create a new if necessary. * Will be forwarded to the appropriate show functions. Returns ------- Return the results from the showMesh* functions. See Also -------- showMesh """ if "axes" in kwargs: print("Deprecation Warning: Please use keyword `ax` instead of `axes`") kwargs['ax'] = kwargs.pop('axes', None) if isinstance(mesh, list): ax = kwargs.pop('ax', None) fitView = kwargs.pop('fitView', True) ax, cbar = show(mesh[0], data, hold=1, ax=ax, fitView=fitView, **kwargs) xmin = mesh[0].xmin() xmax = mesh[0].xmax() ymin = mesh[0].ymin() ymax = mesh[0].ymax() for m in mesh[1:]: ax, cbar = show(m, data, ax=ax, hold=1, fitView=False, **kwargs) xmin = min(xmin, m.xmin()) xmax = max(xmax, m.xmax()) ymin = min(ymin, m.ymin()) ymax = max(ymax, m.ymax()) # ax.relim() # ax.autoscale_view(tight=True) if fitView is not False: ax.set_xlim([xmin, xmax]) ax.set_ylim([ymin, ymax]) # print(ax.get_data_interval()) return ax, cbar if isinstance(mesh, pg.Mesh): if mesh.dim() == 2: if pg.zero(pg.y(mesh)): pg.info("swap z<->y coordinates for visualization.") meshSwap = pg.Mesh(mesh) for n in meshSwap.nodes(): n.pos()[1] = n.pos()[2] return showMesh(meshSwap, data, **kwargs) return showMesh(mesh, data, **kwargs) elif mesh.dim() == 3: from .mayaview import showMesh3D return showMesh3D(mesh, data, **kwargs) else: pg.error("ERROR: Mesh not valid.", mesh) ax = kwargs.pop('ax', None) if ax is None: ax = plt.subplots()[1] return ax, None
def show(obj=None, data=None, **kwargs): """Mesh and model visualization. Syntactic sugar to show a obj with data. Forwards to a known visualization for obj. Typical is :py:mod:`pygimli.viewer.showMesh` or :py:mod:`pygimli.viewer.mayaview.showMesh3D` to show most of the typical 2D and 3D content. See tutorials and examples for usage hints. An empty show call creates an empty ax window. Parameters ---------- obj: obj obj can be so far. * :gimliapi:`GIMLI::Mesh` or list of meshes * DataContainer * pg.core.Sparse[Map]Matrix data: iterable Optionally data to visualize. See appropriate show function. Keyword Arguments ----------------- **kwargs Additional kwargs forward to appropriate show functions. * ax : axe [None] Matplotlib axes object. Create a new if necessary. * fitView : bool [True] Scale x and y limits to match the view. Returns ------- Return the results from the showMesh* functions. Usually the axe object and a colorbar. See Also -------- showMesh """ if "axes" in kwargs: # remove me in 1.2 #20200515 print("Deprecation Warning: Please use keyword `ax` instead of `axes`") kwargs['ax'] = kwargs.pop('axes', None) ### Empty call just to create a axes if obj is None and not 'mesh' in kwargs.keys(): ax = kwargs.pop('ax', None) if ax is None: ax = plt.subplots(figsize=kwargs.pop('figsize', None))[1] return ax, None ### try to interprete obj containes a mesh if hasattr(obj, 'mesh'): return pg.show(obj.mesh, obj, **kwargs) ### try to interprete obj as ERT Data if isinstance(obj, pg.DataContainerERT): from pygimli.physics.ert import showERTData return showERTData(obj, vals=kwargs.pop('vals', data), **kwargs) ### try to interprete obj as matrices if isinstance(obj, pg.core.MatrixBase) or \ (isinstance(obj, np.ndarray) and obj.ndim == 2): return showMatrix(obj, **kwargs) try: from scipy.sparse import spmatrix if isinstance(obj, spmatrix): return showMatrix(obj, **kwargs) except ImportError: pass ### try to interprete obj as mesh or list of meshes mesh = kwargs.pop('mesh', obj) fitView = kwargs.get('fitView', True) if isinstance(mesh, list): ax = kwargs.pop('ax', None) ax, cBar = show(mesh[0], data, hold=1, ax=ax, fitView=fitView, **kwargs) for m in mesh[1:]: ax, cBar = show(m, data, ax=ax, hold=1, fitView=False, **kwargs) if fitView is not False: ax.autoscale(enable=True, axis='both', tight=True) ax.set_aspect('equal') return ax, cBar if isinstance(mesh, pg.Mesh): if mesh.dim() == 2: if pg.zero(pg.y(mesh)): pg.info("swap z<->y coordinates for visualization.") meshSwap = pg.Mesh(mesh) for n in meshSwap.nodes(): n.pos()[1] = n.pos()[2] return showMesh(meshSwap, data, **kwargs) return showMesh(mesh, data, **kwargs) elif mesh.dim() == 3: from .vistaview import showMesh3D return showMesh3D(mesh, data, **kwargs) else: pg.error("ERROR: Mesh not valid.", mesh) pg.error("Can't interprete obj: {0} to show.".format(obj)) return None, None
def show(obj=None, data=None, **kwargs): """Mesh and model visualization. Syntactic sugar to show a obj with data. Forwards to a known visualization for obj. Typical is :py:mod:`pygimli.viewer.showMesh` or :py:mod:`pygimli.viewer.mayaview.showMesh3D` to show most of the typical 2D and 3D content. See tutorials and examples for usage hints. An empty show call creates an empty ax window. Parameters ---------- obj: obj obj can be so far. * :gimliapi:`GIMLI::Mesh` or list of meshes * DataContainer * pg.core.Sparse[Map]Matrix data: iterable Optionally data to visualize. See appropriate show function. Keyword Arguments ----------------- **kwargs Additional kwargs forward to appropriate show functions. * ax : axe [None] Matplotlib axes object. Create a new if necessary. * fitView : bool [True] Scale x and y limits to match the view. Returns ------- Return the results from the showMesh* functions. Usually the axe object and a colorbar. See Also -------- showMesh """ if "axes" in kwargs: print("Deprecation Warning: Please use keyword `ax` instead of `axes`") kwargs['ax'] = kwargs.pop('axes', None) if isinstance(obj, pg.DataContainerERT): from pygimli.physics.ert import showERTData return showERTData(obj, vals=kwargs.pop('vals', data), **kwargs) if isinstance(obj, pg.core.MatrixBase): ax, _ = pg.show() return drawMatrix(ax, obj, **kwargs) mesh = kwargs.pop('mesh', obj) if isinstance(mesh, list): ax = kwargs.pop('ax', None) fitView = kwargs.pop('fitView', ax is None) ax, cBar = show(mesh[0], data, hold=1, ax=ax, fitView=fitView, **kwargs) xMin = mesh[0].xMin() xMax = mesh[0].xMax() yMin = mesh[0].yMin() yMax = mesh[0].yMax() for m in mesh[1:]: ax, cBar = show(m, data, ax=ax, hold=1, fitView=False, **kwargs) xMin = min(xMin, m.xMin()) xMax = max(xMax, m.xMax()) yMin = min(yMin, m.yMin()) yMax = max(yMax, m.yMax()) # ax.relim() # ax.autoscale_view(tight=True) if fitView is not False: ax.set_xlim([xMin, xMax]) ax.set_ylim([yMin, yMax]) # print(ax.get_data_interval()) return ax, cBar if isinstance(mesh, pg.Mesh): if mesh.dim() == 2: if pg.zero(pg.y(mesh)): pg.info("swap z<->y coordinates for visualization.") meshSwap = pg.Mesh(mesh) for n in meshSwap.nodes(): n.pos()[1] = n.pos()[2] return showMesh(meshSwap, data, **kwargs) return showMesh(mesh, data, **kwargs) elif mesh.dim() == 3: from .vistaview import showMesh3D return showMesh3D(mesh, data, **kwargs) else: pg.error("ERROR: Mesh not valid.", mesh) ax = kwargs.pop('ax', None) if ax is None: ax = plt.subplots()[1] return ax, None
def show(mesh=None, data=None, **kwargs): """Mesh and model visualization. Syntactic sugar to show a mesh with data. Forwards to :py:mod:`pygimli.viewer.showMesh` or :py:mod:`pygimli.viewer.mayaview.showMesh3D` to show most of the typical 2D and 3D content. See tutorials and examples for usage hints. An empty show call creates an empty ax window. Parameters ---------- mesh : :gimliapi:`GIMLI::Mesh` or list of meshes 2D or 3D GIMLi mesh **kwargs : * fitView : bool [True] Scale x and y limits to match the view. * ax : axe [None] Matplotlib axes object. Create a new if necessary. * Will be forwarded to the appropriate show functions. Returns ------- Return the results from the showMesh* functions. See Also -------- showMesh """ if "axes" in kwargs: print("Deprecation Warning: Please use keyword `ax` instead of `axes`") kwargs['ax'] = kwargs.pop('axes', None) if isinstance(mesh, list): ax = kwargs.pop('ax', None) fitView = kwargs.pop('fitView', True) ax, cbar = show(mesh[0], data, hold=1, ax=ax, fitView=fitView, **kwargs) xmin = mesh[0].xmin() xmax = mesh[0].xmax() ymin = mesh[0].ymin() ymax = mesh[0].ymax() for m in mesh[1:]: ax, cbar = show(m, data, ax=ax, hold=1, fitView=False, **kwargs) xmin = min(xmin, m.xmin()) xmax = max(xmax, m.xmax()) ymin = min(ymin, m.ymin()) ymax = max(ymax, m.ymax()) # ax.relim() # ax.autoscale_view(tight=True) if fitView is not False: ax.set_xlim([xmin, xmax]) ax.set_ylim([ymin, ymax]) # print(ax.get_data_interval()) return ax, cbar if isinstance(mesh, pg.Mesh): if mesh.dim() == 2: if pg.zero(pg.y(mesh)): pg.info("swap z<->y coordinates for visualization.") meshSwap = pg.Mesh(mesh) for n in meshSwap.nodes(): n.pos()[1] = n.pos()[2] return showMesh(meshSwap, data, **kwargs) return showMesh(mesh, data, **kwargs) elif mesh.dim() == 3: from .mayaview import showMesh3D return showMesh3D(mesh, data, **kwargs) else: pg.error("ERROR: Mesh not valid.", mesh) ax = kwargs.pop('ax', None) if ax is None: ax = plt.subplots()[1] return ax, None