Source code for sigmaepsilon.mesh.plotting.plotly.tri

from ...config import __hasplotly__

if not __hasplotly__:  # pragma: no cover

    def triplot_plotly(*_, **__):
        raise ImportError(
            "You need Plotly for this. Install it with 'pip install plotly'. "
            "You may also need to restart your kernel and reload the package."
        )

else:
    from typing import Optional, Union

    import plotly.graph_objects as go
    from numpy import ndarray

    from sigmaepsilon.mesh.utils.topology import unique_topo_data
    from sigmaepsilon.mesh.utils.tri import edges_tri
    from .lines import scatter_lines_plotly

[docs] def triplot_plotly( points: ndarray, triangles: ndarray, data: Optional[ndarray] = None, plot_edges: Optional[bool] = True, edges: Optional[Union[bool, None]] = None, ) -> go.Figure: """ Plots a triangulation optionally with edges and attached field data in 3d. Parameters ---------- points: numpy.ndarray 2d float array of points. data: numpy.ndarray 1d float array of scalar data over the points. plot_edges: bool, Optional If True, plots the edges of the mesh. Default is False. edges: numpy.ndarray, Optional The edges to plot. If provided, `plot_edges` is ignored. Default is None. Returns ------- figure: :class:`plotly.graph_objects.Figure` The figure object. Example ------- .. plotly:: :include-source: True from sigmaepsilon.mesh.plotting import triplot_plotly from sigmaepsilon.mesh import grid from sigmaepsilon.mesh.utils.topology.tr import Q4_to_T3 import numpy as np gridparams = { "size": (1200, 600), "shape": (4, 4), "eshape": (2, 2), } coords, topo = grid(**gridparams) points, triangles = Q4_to_T3(coords, topo, path="grid") data = np.random.rand(len(points)) triplot_plotly(points, triangles, data, plot_edges=True) """ x = points[:, 0] y = points[:, 1] z = points[:, 2] i = triangles[:, 0] j = triangles[:, 1] k = triangles[:, 2] if data is not None: fig = go.Figure( data=[ go.Mesh3d( x=x, y=y, z=z, i=i, j=j, k=k, intensity=data, opacity=1, ) ] ) else: fig = go.Figure( data=[ go.Mesh3d( x=x, y=y, z=z, i=i, j=j, k=k, opacity=1, ) ] ) fig.update_layout( template="plotly", autosize=True, margin=dict(l=1, r=1, b=1, t=1, pad=0), scene=dict( aspectmode="data", ), ) if edges is not None: plot_edges = True if plot_edges: if edges is None: edges, _ = unique_topo_data(edges_tri(triangles)) scatter_lines_plotly(points, edges, fig=fig) return fig
__all__ = ["triplot_plotly"]