From a23dcd9ac62c77a4730be225dfbacf8168f18948 Mon Sep 17 00:00:00 2001 From: David Minton Date: Sun, 5 Sep 2021 09:22:59 -0400 Subject: [PATCH 1/2] Updated plotting script to be compatible with NetCDF, and make the markers equal sized --- .../symba_chambers_2013/aescattermovie.py | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/examples/symba_chambers_2013/aescattermovie.py b/examples/symba_chambers_2013/aescattermovie.py index 27d2ef06b..ebecc470d 100755 --- a/examples/symba_chambers_2013/aescattermovie.py +++ b/examples/symba_chambers_2013/aescattermovie.py @@ -12,7 +12,8 @@ xmax = 2.00 ymin = 1e-4 ymax = 1.0 -framejump = 10 +framejump = 1 +ncutoff = 1e20 class AnimatedScatter(object): """An animated scatter plot using matplotlib.animations.FuncAnimation.""" @@ -22,8 +23,7 @@ def __init__(self, ds, param): nframes = int(ds['time'].size / framejump) self.ds = ds self.param = param - self.ds['radmarker'] = self.ds['radius'].fillna(0) - self.ds['radmarker'] = self.ds['radmarker'] / self.ds['radmarker'].max() * radscale + self.Rcb = self.ds['radius'].sel(id=0, time=0).values self.clist = {'Initial conditions' : 'xkcd:faded blue', 'Disruption' : 'xkcd:marigold', @@ -38,14 +38,15 @@ def __init__(self, ds, param): self.ax.set_xlim(xmin, xmax) self.ax.set_ylim(ymin, ymax) fig.add_axes(self.ax) - self.ani = animation.FuncAnimation(fig, self.update, interval=1, frames=nframes, init_func=self.setup_plot, blit=False) + self.ani = animation.FuncAnimation(fig, self.update, interval=1, frames=nframes, init_func=self.setup_plot, blit=True) + #self.ani.save('aescatter.mp4', fps=30, dpi=300, extra_args=['-vcodec', 'libx264']) self.ani.save('aescatter.mp4', fps=30, dpi=300, extra_args=['-vcodec', 'mpeg4']) print('Finished writing aescattter.mp4') def scatters(self, pl, radmarker, origin): scat = [] for key, value in self.clist.items(): - idx = origin == value + idx = origin == key s = self.ax.scatter(pl[idx, 0], pl[idx, 1], marker='o', s=radmarker[idx], c=value, alpha=0.75, label=key) scat.append(s) return scat @@ -70,19 +71,25 @@ def setup_plot(self): self.s1 = slist[1] self.s2 = slist[2] self.s3 = slist[3] - self.ax.legend(loc='lower right') + leg = self.ax.legend(loc='lower right') + leg = plt.legend(loc="lower left", scatterpoints=1, fontsize=10) + for i,l in enumerate(leg.legendHandles): + leg.legendHandles[i]._sizes = [20] return self.s0, self.s1, self.s2, self.s3, self.title def data_stream(self, frame=0): while True: d = self.ds.isel(time = frame) - d = d.where(np.invert(np.isnan(d['a'])), drop=True) + d = d.where(d['radius'] < self.Rcb, drop=True) + d['radmarker'] = (d['radius'] / self.Rcb) * radscale + radius = d['radmarker'].values + radius = d['radmarker'].values Gmass = d['Gmass'].values a = d['a'].values / AU e = d['e'].values name = d['id'].values - npl = d.id.count().values + npl = d['npl'].values[0] radmarker = d['radmarker'] origin = d['origin_type'] From 0e325db07d3c87cf153e223a3a80c33697bb02e3 Mon Sep 17 00:00:00 2001 From: David Minton Date: Sun, 5 Sep 2021 09:30:12 -0400 Subject: [PATCH 2/2] Updated plotting scripts with better legends --- .../symba_chambers_2013/aescattermovie.py | 3 +-- examples/symba_clement_2018/aescattermovie.py | 21 ++++++++++++------- examples/symba_mars_disk/aescattermovie.py | 6 ++++-- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/examples/symba_chambers_2013/aescattermovie.py b/examples/symba_chambers_2013/aescattermovie.py index ebecc470d..6f73a32dc 100755 --- a/examples/symba_chambers_2013/aescattermovie.py +++ b/examples/symba_chambers_2013/aescattermovie.py @@ -71,8 +71,7 @@ def setup_plot(self): self.s1 = slist[1] self.s2 = slist[2] self.s3 = slist[3] - leg = self.ax.legend(loc='lower right') - leg = plt.legend(loc="lower left", scatterpoints=1, fontsize=10) + leg = plt.legend(loc="lower right", scatterpoints=1, fontsize=10) for i,l in enumerate(leg.legendHandles): leg.legendHandles[i]._sizes = [20] return self.s0, self.s1, self.s2, self.s3, self.title diff --git a/examples/symba_clement_2018/aescattermovie.py b/examples/symba_clement_2018/aescattermovie.py index 8e9fe9964..d256dbe96 100755 --- a/examples/symba_clement_2018/aescattermovie.py +++ b/examples/symba_clement_2018/aescattermovie.py @@ -5,6 +5,7 @@ from matplotlib import animation import matplotlib.colors as mcolors + titletext = "Clement et al. (2018)" radscale = 2000 AU = 1.0 @@ -13,6 +14,7 @@ ymin = 1e-4 ymax = 1.0 framejump = 1 +ncutoff = 1e20 class AnimatedScatter(object): """An animated scatter plot using matplotlib.animations.FuncAnimation.""" @@ -22,8 +24,7 @@ def __init__(self, ds, param): nframes = int(ds['time'].size / framejump) self.ds = ds self.param = param - self.ds['radmarker'] = self.ds['radius'].fillna(0) - self.ds['radmarker'] = self.ds['radmarker'] / self.ds['radmarker'].max() * radscale + self.Rcb = self.ds['radius'].sel(id=0, time=0).values self.clist = {'Initial conditions' : 'xkcd:faded blue', 'Disruption' : 'xkcd:marigold', @@ -38,14 +39,15 @@ def __init__(self, ds, param): self.ax.set_xlim(xmin, xmax) self.ax.set_ylim(ymin, ymax) fig.add_axes(self.ax) - self.ani = animation.FuncAnimation(fig, self.update, interval=1, frames=nframes, init_func=self.setup_plot, blit=False) + self.ani = animation.FuncAnimation(fig, self.update, interval=1, frames=nframes, init_func=self.setup_plot, blit=True) + #self.ani.save('aescatter.mp4', fps=30, dpi=300, extra_args=['-vcodec', 'libx264']) self.ani.save('aescatter.mp4', fps=30, dpi=300, extra_args=['-vcodec', 'mpeg4']) print('Finished writing aescattter.mp4') def scatters(self, pl, radmarker, origin): scat = [] for key, value in self.clist.items(): - idx = origin == value + idx = origin == key s = self.ax.scatter(pl[idx, 0], pl[idx, 1], marker='o', s=radmarker[idx], c=value, alpha=0.75, label=key) scat.append(s) return scat @@ -70,19 +72,24 @@ def setup_plot(self): self.s1 = slist[1] self.s2 = slist[2] self.s3 = slist[3] - self.ax.legend(loc='lower right') + leg = plt.legend(loc="lower right", scatterpoints=1, fontsize=10) + for i,l in enumerate(leg.legendHandles): + leg.legendHandles[i]._sizes = [20] return self.s0, self.s1, self.s2, self.s3, self.title def data_stream(self, frame=0): while True: d = self.ds.isel(time = frame) - d = d.where(np.invert(np.isnan(d['a'])), drop=True) + d = d.where(d['radius'] < self.Rcb, drop=True) + d['radmarker'] = (d['radius'] / self.Rcb) * radscale + radius = d['radmarker'].values + radius = d['radmarker'].values Gmass = d['Gmass'].values a = d['a'].values / AU e = d['e'].values name = d['id'].values - npl = d.id.count().values + npl = d['npl'].values[0] radmarker = d['radmarker'] origin = d['origin_type'] diff --git a/examples/symba_mars_disk/aescattermovie.py b/examples/symba_mars_disk/aescattermovie.py index f4da3762e..85b99c0fa 100755 --- a/examples/symba_mars_disk/aescattermovie.py +++ b/examples/symba_mars_disk/aescattermovie.py @@ -71,7 +71,9 @@ def setup_plot(self): self.s1 = slist[1] self.s2 = slist[2] self.s3 = slist[3] - self.ax.legend(loc='upper right') + leg = plt.legend(loc="upper right", scatterpoints=1, fontsize=10) + for i,l in enumerate(leg.legendHandles): + leg.legendHandles[i]._sizes = [20] return self.s0, self.s1, self.s2, self.s3, self.title def data_stream(self, frame=0): @@ -85,7 +87,7 @@ def data_stream(self, frame=0): Gmass = d['Gmass'].values a = d['a'].values / self.Rcb e = d['e'].values - name = d['id'].values + name = d['name'].values npl = d['npl'].values[0] radmarker = d['radmarker'] origin = d['origin_type'].values