Dear yt-users,

Hi, I have a question on ProfilePlot. I want to make profile plot of dark matter density, taking gas density as a bin field, weighted by dark matter mass in the cell.I could make the plot, but the plot looks strange (it looks like chopped in small pieces). Also, I tried other plot changing n_bins like 64,32,16,8,... but they still be "chopped", or sometimes there were no line at all. For comparison, I made a plot weighted by cell_mass (which I don't want), and this look OK. To my understanding, if and only if there is at least 1 cell which fall into each bin, there should be some nonzero value no matter what weight I use, so the range of density which has nonzero dark matter density doesn't depend on the choice of weight field. It seems there is a discrepancy between these two plots.

Could you tell me what's wrong with me?
I tried on yt example dataset, IsolatedGalaxy/galaxy0030/galaxy0030.
I'm working with yt-3.4.0.

this is my code:

import yt

from yt.data_objects.particle_filters import add_particle_filter


def stars(pfilter, data):

    filter = data[(pfilter.filtered_type, "particle_type")] == 2

    return filter

def DMparticles(pfilter, data):

    filter = data[(pfilter.filtered_type, "particle_type")] == 1

    return filter


add_particle_filter("stars", function=stars, filtered_type='io',

                  requires=["particle_type"])

add_particle_filter("DMparticles", function=DMparticles, filtered_type='io',

                   requires=["particle_type"])


def only_DM(field, data):

    return data['deposit','DMparticles_density']

def DM_in_cell_mass(field, data):

    return (data['only_DM_Density']*data['cell_volume'])


ds_all=yt.load("~/IsolatedGalaxy/galaxy0030/galaxy0030")


ds_all.add_particle_filter('stars')

ds_all.add_particle_filter('DMparticles')


ds_all.add_field(("gas", "only_DM_Density"), units="g/cm**3", function=only_DM)

ds_all.add_field(("gas", "DM_cell_mass"), units="g", function=DM_in_cell_mass)


sp = ds_all.sphere([0.5, 0.5, 0.5], (10, "kpc"))


lineplot_gas_DM_density_128 = yt.ProfilePlot(sp, "density", ["only_DM_Density"], weight_field="DM_cell_mass", n_bins=128)

lineplot_gas_DM_density_gasweighted_128 = yt.ProfilePlot(sp, "density", ["only_DM_Density"], weight_field="cell_mass", n_bins=128)


lineplot_gas_DM_density_gasweighted_128.save("128_gasweighted")

lineplot_gas_DM_density_128.save("128_DMweighted")


Sincerely,
Y.T.