You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			87 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			87 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
import numpy as np
 | 
						|
from matplotlib.tri._triangulation import Triangulation
 | 
						|
import matplotlib.cbook as cbook
 | 
						|
import matplotlib.lines as mlines
 | 
						|
 | 
						|
 | 
						|
def triplot(ax, *args, **kwargs):
 | 
						|
    """
 | 
						|
    Draw an unstructured triangular grid as lines and/or markers.
 | 
						|
 | 
						|
    Call signatures::
 | 
						|
 | 
						|
      triplot(triangulation, ...)
 | 
						|
      triplot(x, y, [triangles], *, [mask=mask], ...)
 | 
						|
 | 
						|
    The triangular grid can be specified either by passing a `.Triangulation`
 | 
						|
    object as the first parameter, or by passing the points *x*, *y* and
 | 
						|
    optionally the *triangles* and a *mask*. If neither of *triangulation* or
 | 
						|
    *triangles* are given, the triangulation is calculated on the fly.
 | 
						|
 | 
						|
    Parameters
 | 
						|
    ----------
 | 
						|
    triangulation : `.Triangulation`
 | 
						|
        An already created triangular grid.
 | 
						|
    x, y, triangles, mask
 | 
						|
        Parameters defining the triangular grid. See `.Triangulation`.
 | 
						|
        This is mutually exclusive with specifying *triangulation*.
 | 
						|
    other_parameters
 | 
						|
        All other args and kwargs are forwarded to `~.Axes.plot`.
 | 
						|
 | 
						|
    Returns
 | 
						|
    -------
 | 
						|
    lines : `~matplotlib.lines.Line2D`
 | 
						|
        The drawn triangles edges.
 | 
						|
    markers : `~matplotlib.lines.Line2D`
 | 
						|
        The drawn marker nodes.
 | 
						|
    """
 | 
						|
    import matplotlib.axes
 | 
						|
 | 
						|
    tri, args, kwargs = Triangulation.get_from_args_and_kwargs(*args, **kwargs)
 | 
						|
    x, y, edges = (tri.x, tri.y, tri.edges)
 | 
						|
 | 
						|
    # Decode plot format string, e.g., 'ro-'
 | 
						|
    fmt = args[0] if args else ""
 | 
						|
    linestyle, marker, color = matplotlib.axes._base._process_plot_format(fmt)
 | 
						|
 | 
						|
    # Insert plot format string into a copy of kwargs (kwargs values prevail).
 | 
						|
    kw = cbook.normalize_kwargs(kwargs, mlines.Line2D)
 | 
						|
    for key, val in zip(('linestyle', 'marker', 'color'),
 | 
						|
                        (linestyle, marker, color)):
 | 
						|
        if val is not None:
 | 
						|
            kw.setdefault(key, val)
 | 
						|
 | 
						|
    # Draw lines without markers.
 | 
						|
    # Note 1: If we drew markers here, most markers would be drawn more than
 | 
						|
    #         once as they belong to several edges.
 | 
						|
    # Note 2: We insert nan values in the flattened edges arrays rather than
 | 
						|
    #         plotting directly (triang.x[edges].T, triang.y[edges].T)
 | 
						|
    #         as it considerably speeds-up code execution.
 | 
						|
    linestyle = kw['linestyle']
 | 
						|
    kw_lines = {
 | 
						|
        **kw,
 | 
						|
        'marker': 'None',  # No marker to draw.
 | 
						|
        'zorder': kw.get('zorder', 1),  # Path default zorder is used.
 | 
						|
    }
 | 
						|
    if linestyle not in [None, 'None', '', ' ']:
 | 
						|
        tri_lines_x = np.insert(x[edges], 2, np.nan, axis=1)
 | 
						|
        tri_lines_y = np.insert(y[edges], 2, np.nan, axis=1)
 | 
						|
        tri_lines = ax.plot(tri_lines_x.ravel(), tri_lines_y.ravel(),
 | 
						|
                            **kw_lines)
 | 
						|
    else:
 | 
						|
        tri_lines = ax.plot([], [], **kw_lines)
 | 
						|
 | 
						|
    # Draw markers separately.
 | 
						|
    marker = kw['marker']
 | 
						|
    kw_markers = {
 | 
						|
        **kw,
 | 
						|
        'linestyle': 'None',  # No line to draw.
 | 
						|
    }
 | 
						|
    kw_markers.pop('label', None)
 | 
						|
    if marker not in [None, 'None', '', ' ']:
 | 
						|
        tri_markers = ax.plot(x, y, **kw_markers)
 | 
						|
    else:
 | 
						|
        tri_markers = ax.plot([], [], **kw_markers)
 | 
						|
 | 
						|
    return tri_lines + tri_markers
 |