# `analysis.tailShapePlot` module

Make a plot of the shape of the tails as a function of mass of the perturbing mass, time and ring size

Source code

    """Make a plot of the shape of the tails as a function of
    mass of the perturbing mass, time and ring size
    """

    import matplotlib.pyplot as plt
    import numpy as np

    from analysis import utils
    from analysis.segmentation import segmentEncounter

    def plotShape(ax, distances, angle, style, label):
        """Plot the shape curves, normalized to maximum radius = 1

        Parameters:
            ax: the matplotlib axis where the data should be plotted
            distances (arr): the distances of each point in the shape of the tail
            angle (arr): the angle of each point in the shape curve of the tail
            style (string): style (dotted, dashed...) for the line, passed to
                matplotlib.
            label (string): label of the encounter. Used for the legend.
        """
        ax.plot(-angles+np.min(angles), distances/np.max(distances),
            label=label, linestyle=style, c='k', alpha=0.7)

    f, axs = plt.subplots(1, 3,  figsize=(12, 3), sharey=True)

    # Varying the mass of the encounter
    for m, st in zip([50, 100, 200], [':', '-','--']):
        data = utils.loadData('{}mass70radius'.format(m), 14000)
        _, (distances, angles), _ = segmentEncounter(data, plot=False)
        plotShape(axs[0], distances, angles, st, m/100)
        axs[0].legend(title=r'$m_{companion}$')
    utils.setAxes(axs[0], x=r'Angle / rad', y=r'Radius / $r_{max}$',
        ycoords=(-0.1,.7))

    # Varying the time since the start of the encounter
    for t, st in zip([4400, 7400, 10400], [':', '-','--']):
        data = utils.loadData('200mass70radius'.format(200), t)
        _, (distances, angles), _ = segmentEncounter(data, plot=False)
        plotShape(axs[1], distances, angles, st, t)
        axs[1].legend(title=r'$t$')
    utils.setAxes(axs[1], x=r'Angle / rad')

    # Varying the radius of the ring
    for r, st in zip([50, 60, 70, 80, 90], [':', '-.','-','--']):
        data = utils.loadData('200mass{}radius'.format(r), 10000)
        _, (distances, angles), _ = segmentEncounter(data, plot=False)
        plotShape(axs[2], distances, angles, st, r)
        axs[2].legend(title=r'Disk radius')
    utils.setAxes(axs[2], x=r'Angle / rad')

    # Some styling
    utils.stylizePlot(axs)
    f.subplots_adjust(hspace=0, wspace=0)
    plt.show()

## Functions

`def plotShape(ax, distances, angle, style, label)`

  Plot the shape curves, normalized to maximum radius = 1

  ## Parameters

  `ax`
    the matplotlib axis where the data should be plotted
  `distances` :`arr`
    the distances of each point in the shape of the tail
  `angle` :`arr`
    the angle of each point in the shape curve of the tail
  `style` :`string`
    style (dotted, dashed…) for the line, passed to matplotlib.
  `label` :`string`
    label of the encounter. Used for the legend.
  Source code

      def plotShape(ax, distances, angle, style, label):
          """Plot the shape curves, normalized to maximum radius = 1

          Parameters:
              ax: the matplotlib axis where the data should be plotted
              distances (arr): the distances of each point in the shape of the tail
              angle (arr): the angle of each point in the shape curve of the tail
              style (string): style (dotted, dashed...) for the line, passed to
                  matplotlib.
              label (string): label of the encounter. Used for the legend.
          """
          ax.plot(-angles+np.min(angles), distances/np.max(distances),
              label=label, linestyle=style, c='k', alpha=0.7)