12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- """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)
|