Hi Sean,
I've been trying to think of the easiest way to do this in the
framework you suggest, and I have a few ideas. The simplest way would
likely be to use a different matplotlib normalizer for your particle
colors:
https://matplotlib.org/3.1.1/tutorials/colors/colormapnorms.html
https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.colors.Normalize.html
Since you're already accessing the plot.cax objects, you should be
able to swap it there. You should then be able to avoid doing
anything with derived fields, etc, as you could control the color maps
themselves.
Do you think that could be a workable solution?
-Matt
On Thu, Jan 2, 2020 at 5:52 PM Sean Larkin via yt-users
<yt-users@python.org> wrote:
>
> Hello All,
>
> I have a question about the Projection plot function in yt. I have a script that plots the smallest mass darkmatter particles of a simulation in all 3 of the 2-d coordinate projections, and overplots the halos found by a halo finder. This script works, and currently plots the colorbar based on the mass in a given 2-d bin as done in some of the basic yt plots included in the website. I am wondering if it is possible to have the color scheme of the particles be based on the squared mass or squared density of the particles in any given 2-d bin, so that the higher density regions are highlighted compared to the background lower density regions. I have included the plotting part of my script below, in case it is helpful.
>
> I hope everyone is having a great New Year!
>
> ds = yt.load(VELA_snaps[position[0]])
> domain_width = float(ds.domain_width.in_units('Mpc/h')[0])
> ad = ds.all_data()
> masses = yt.np.unique(ad[('darkmatter', 'particle_mass')])
> #filter out the darkmatter0 particles
> def mass_filter(pfilter, data):
> filter = data[(pfilter.filtered_type, 'particle_mass')] == masses[0]
> return filter
> yt.add_particle_filter('darkmatter0', function=mass_filter, filtered_type='darkmatter', requires=['particle_mass'])
> ds.add_particle_filter('darkmatter0')
>
> scale = float(ds.scale_factor)
>
> fig = plt.figure()
>
> grid = AxesGrid(fig, (0.075,0.075,10,5),
> nrows_ncols = (3, 1),
> axes_pad = 1.0,
> label_mode = "L",
> share_all = False,
> cbar_location="right",
> cbar_mode="each",
> cbar_size="3%",
> cbar_pad="0%")
>
> zoom = 10
>
> x0 = float(consistent.halo_data_sorted[index][0][17]) * scale / domain_width
> y0 = float(consistent.halo_data_sorted[index][0][18]) * scale / domain_width
> z0 = float(consistent.halo_data_sorted[index][0][19]) * scale / domain_width
> center = [x0, y0, z0]
>
> a = yt.ParticlePlot(ds, ('darkmatter0', 'particle_position_x'), ('darkmatter0', 'particle_position_y'),\
> ('darkmatter0', 'particle_mass'), center=center)
> a.set_unit(('darkmatter0','particle_mass'), 'Msun')
> a.zoom(zoom)
> b = yt.ParticlePlot(ds, ('darkmatter0', 'particle_position_y'), ('darkmatter0', 'particle_position_z'),\
> ('darkmatter0', 'particle_mass'), center=center)
> b.set_unit(('darkmatter0','particle_mass'), 'Msun')
> b.zoom(zoom)
> c = yt.ParticlePlot(ds, ('darkmatter0', 'particle_position_z'), ('darkmatter0', 'particle_position_x'),\
> ('darkmatter0', 'particle_mass'), center=center)
> c.set_unit(('darkmatter0','particle_mass'), 'Msun')
> c.zoom(zoom)
>
>
> for halos in consistent.halo_data_sorted[index]:
> x = float(halos[17]) * scale / domain_width
> y = float(halos[18]) * scale / domain_width
> z = float(halos[19]) * scale / domain_width
> r = float(halos[11]) * scale / .7
> center = [x, y, z]
> a.annotate_sphere(center, radius=(r, 'kpc'), circle_args={'color':'red'})
> b.annotate_sphere(center, radius=(r, 'kpc'), circle_args={'color':'red'})
> c.annotate_sphere(center, radius=(r, 'kpc'), circle_args={'color':'red'})
>
>
> index = 0
> for letter in [a,b,c]:
> plot = letter.plots[('darkmatter0', 'particle_mass')]
> plot.figure = fig
> plot.axes = grid[index].axes
> plot.cax = grid.cbar_axes[index]
> letter._setup_plots()
> index = index + 1
>
> plt.savefig('{}/CatalogProjectionYT_VELA{}_Scale{}.png'.format(out_dir, VELA_number, str(scale)[2:5]), bbox_inches='tight')
> plt.close()
> _______________________________________________
> yt-users mailing list -- yt-users@python.org
> To unsubscribe send an email to yt-users-leave@python.org