# `analysis.antennaeKDE` module

Plots the Antennae using Kernel Density Estimation to map the density

Source code

    """Plots the Antennae using Kernel Density Estimation to map the density"""

    import matplotlib.pyplot as plt
    import numpy as np
    from scipy.stats import gaussian_kde

    from analysis.colormaps import red_map
    from analysis import utils

    def plotKDE(i, theta, phi, view):
        """Plot the Antennae galaxies using kernel density estimation

        Parameters:
            i (int): Timestep at which to plot them
            theta (float): polar angle
            phi (float): azimuthal angle
            view (float): rotation along the line of sight
        """
        data = utils.loadData('antennae', 13500)
        r_vec = data['r_vec'][::]

        # Rotate to view from (theta, phi, view) viewpoint
        M1 = np.array([[1, 0, 0],
            [0, np.cos(theta), np.sin(theta)],
            [0, -np.sin(theta), np.cos(theta)]])
        M2 = np.array([[np.cos(phi), np.sin(phi), 0],
            [-np.sin(phi), np.cos(phi), 0],
            [0, 0, 1]])
        M3 = np.array([[np.cos(view), np.sin(view), 0],
            [-np.sin(view), np.cos(view), 0],
            [0, 0, 1]])
        M = np.matmul(M2, np.matmul(M1, M3))
        r_vec = np.tensordot(r_vec, M, axes=[1,0])

        # Plotting
        plt.figure(figsize=(4,5), dpi=400)
        # Perform Kernel Density Estimation to colour by density
        xy = np.vstack([r_vec[:,0],r_vec[:,1]])
        c = gaussian_kde(xy)(xy)
        # Densest points are plotted last
        idx = c.argsort()
        x, y, c = r_vec[:,0][idx], r_vec[:,1][idx], c[idx]

        plt.scatter(x, y, c=c, s=3, edgecolor='', cmap=red_map)
        plt.axis('square')
        plt.show()

    plotKDE(135, 1.86, 4.10, 5.10)

## Functions

`def plotKDE(i, theta, phi, view)`

  Plot the Antennae galaxies using kernel density estimation

  ## Parameters

  `i` :`int`
    Timestep at which to plot them
  `theta` :`float`
    polar angle
  `phi` :`float`
    azimuthal angle
  `view` :`float`
    rotation along the line of sight
  Source code

      def plotKDE(i, theta, phi, view):
          """Plot the Antennae galaxies using kernel density estimation

          Parameters:
              i (int): Timestep at which to plot them
              theta (float): polar angle
              phi (float): azimuthal angle
              view (float): rotation along the line of sight
          """
          data = utils.loadData('antennae', 13500)
          r_vec = data['r_vec'][::]

          # Rotate to view from (theta, phi, view) viewpoint
          M1 = np.array([[1, 0, 0],
              [0, np.cos(theta), np.sin(theta)],
              [0, -np.sin(theta), np.cos(theta)]])
          M2 = np.array([[np.cos(phi), np.sin(phi), 0],
              [-np.sin(phi), np.cos(phi), 0],
              [0, 0, 1]])
          M3 = np.array([[np.cos(view), np.sin(view), 0],
              [-np.sin(view), np.cos(view), 0],
              [0, 0, 1]])
          M = np.matmul(M2, np.matmul(M1, M3))
          r_vec = np.tensordot(r_vec, M, axes=[1,0])

          # Plotting
          plt.figure(figsize=(4,5), dpi=400)
          # Perform Kernel Density Estimation to colour by density
          xy = np.vstack([r_vec[:,0],r_vec[:,1]])
          c = gaussian_kde(xy)(xy)
          # Densest points are plotted last
          idx = c.argsort()
          x, y, c = r_vec[:,0][idx], r_vec[:,1][idx], c[idx]

          plt.scatter(x, y, c=c, s=3, edgecolor='', cmap=red_map)
          plt.axis('square')
          plt.show()