123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- """Make a plot of an encountering with rings (fig 1, fig 3) and
- colour each ring according to the initial distance. It plots a
- prograde equalmass encounter by default.
- """
- import matplotlib.pyplot as plt
- from scipy.interpolate import splprep, splev, interp1d
- from matplotlib import markers
- import numpy as np
- from analysis.colormaps import parula_map
- from analysis import utils
- def plotRings(ax, data, n):
- """Make a ring plot of the data.
- Parameters:
- ax: the matplotlib axis where the data should be plotted
- data: a data dictionary in the format saved by the simulation
- n (int): the number of particles to plot. These will be interpolated
- and can be much higher than those originally in the simulation.
- """
- # Identify all the rings
- rings = np.unique(data['type'][:,1])
- rings = rings[rings!='0']
- # Plot each ring
- for ring, color, in zip(rings,
- parula_map(np.linspace(1.0, 0., len(rings)))):
- xy = data['r_vec'][data['type'][:,1]==ring] #data for this ring
- # Interpolate data (to use opacity to plot local density)
- tck, u = splprep(xy[:,:2].T, u=None, s=0.0, per=1)
- f = interp1d(np.linspace(0,1,len(u)), u, kind='cubic')
- x_new, y_new = splev(f(np.linspace(0,1,n)), tck, der=0)
- #Plot data
- ax.scatter(x_new, y_new, s=2, c=[color], alpha=0.01)
- utils.plotCOM(ax)
- utils.plotCenterMasses(ax, data)
- utils.plotTracks(ax, data['tracks'])
- # Styling
- utils.setAxes(ax, mode='hide')
- ####################################
- ####################################
- # List of times to plot
- ts = [2000, 3000, 3500, 4000, 4900]
- figsize = (12, 4)
- fileName = 'prograde_equalmass'
- f, axs = plt.subplots(1, len(ts), figsize=figsize, sharey=False)
- for t, ax in zip(ts, axs):
- data = utils.loadData(fileName, t)
- plotRings(ax, data, n=10000)
- height, width = 3.0, 3 * 1/len(ts) * figsize[0]/figsize[1]
- utils.setSize(ax, x=(-width, width), y=(-height, height), mode='square')
- f.subplots_adjust(hspace=0, wspace=0)
- plt.show()
|