[yt-dev] Profile Plotting

Matthew Turk matthewturk at gmail.com
Tue Dec 4 13:21:31 PST 2012


Hi everyone,

I've put in a YTEP, which has been built here:

https://yt.readthedocs.org/projects/ytep/en/latest/YTEPs/YTEP-0002.html

Before it goes forward I'd like to hear feedback on what it describes
and proposes, and then I will continue with implementing and shoring
things up.  In particular, hearing how it could be made to provide as
seamless an experience as the PlotWindow would be nice.

-Matt

On Mon, Dec 3, 2012 at 2:03 PM, Matthew Turk <matthewturk at gmail.com> wrote:
> On Mon, Dec 3, 2012 at 2:02 PM, Matthew Turk <matthewturk at gmail.com> wrote:
>> Hi all,
>>
>> As I noted in my other email, there was one major feature we'd talked
>> about for yt 2.5 that we never even really worked on.  Nathan and
>> others pushed really hard on rethinking and redesigning the way image
>> plots were made and handled back in the 2.4 series, which eliminated
>> the main use case for the PlotCollection.  However, the remaining
>> firewalls on PlotCollection are the 1-D and 2-D phase plots.
>>
>> There's been broad consensus that we need a new method for doing this,
>> analogous to how PlotWindow serves to replace "add_slice" and
>> "add_projection" from the PlotCollection.  Something that gets out of
>> the way and lets people modify their plots as they see fit.
>>
>> A while back I implemented a first pass at this, which you can see in
>> yt/visualization/profile_plotter.py:
>>
>> https://bitbucket.org/yt_analysis/yt/src/711e95aff04b54e6ccda7dfefb0b0ae17c3830a7/yt/visualization/profile_plotter.py?at=yt
>>
>> The idea here is that you create an instance of ProfilePlotter or
>> PhasePlotter, which then "Does the right thing" and creates the
>> necessary data objects and the like.  This object can then either
>> create its own axes+figure in matplotlib, or it can deposit itself
>> into an existing axes object.  It includes axis objects and plot
>> containers that know how to plot themselves.
>>
>> I don't know that I necessarily like how this is done.  It's very
>> declarative, and step by step, but I think it could be easier.  Here's
>> an example:
>>
>> https://hub.yt-project.org/go/vlilvw
>
> That should read:
>
> https://hub.yt-project.org/nb/vlilvw
>
>>
>> One thing I think *is* quite nice is that the *plot* object is
>> independent of the profile itself.  This makes it easier to pickle and
>> unpickle things, and is the reason for the existence of the various
>> sub-objects off of ProfilePlotter.  This is useful for the use case of
>> making very large datasets into profiles, pickling the resulting
>> plots, and modifying them later.
>>
>> So here are my specific questions:
>>
>>  * Does this rough outline of how the object works seem good?  As in,
>> making a plotter object, making it have a sub .plot object, and then
>> dispatching that plot object to various backends?  (Probably nearly
>> always matplotlib.)
>>  * Should we add on additional convenience operations?
>>  * How should it interface with existing profiles?
>>  * Should implementing this and finalizing the design be a blocker for 2.5?
>>
>> I will create and update a YTEP with the resulting discussion from
>> this.  Nathan, Jeff and Britton -- I would very much appreciate your
>> feedback, as I know you have experience with (respectively) plot
>> windows, matplotlib, and large datasets being profiled.
>>
>> -Matt



More information about the yt-dev mailing list