[racket-dev] New plot library [Was: (to Jay) Re: What I'm working on]

From: Neil Toronto (neil.toronto at gmail.com)
Date: Tue Aug 2 15:04:53 EDT 2011

I'll write a backward-compatible wrapper for plot, so yes. Mostly. I'll 
try to emulate it as closely as possible, but any code that depends on 
the specific pixels or snip% class `plot' generates will probably break.

I want plot2d and plot3d to be a little saner than plot. For example, 
currently, plot2d automatically shows the entirety of a parabolic curve; 
in contrast, plot only shows it in the area [-5,5] x [-5,5] unless you 
override it.

Neil T

On 08/02/2011 11:38 AM, Matthias Felleisen wrote:
> Will it be backward compatible with plot? -- Matthias
>
>
>
> On Aug 2, 2011, at 1:33 PM, Neil Toronto wrote:
>
>> Re-routing this email exchange to [racket-dev] for comments.
>>
>> Long story short: Jay roped me into replacing the current `plot' module by wrapping a plot library I was working on for my own use. (FWIW, I'm happy to finally contribute something!) Intended features:
>>
>> 1. Doesn't depend on an FFI to libplplot
>> 2. Can automatically place plot area on functions and points
>> 3. Uses parameters for keyword argument default values
>> 4. Uses only dc<%>  primitives / Is very pretty
>> 5. Is more flexible (when using the new plot2d and plot3d modules)
>>
>> Linux screenshots:
>>
>>     http://students.cs.byu.edu/~ntoronto/plot2d.png
>>     http://students.cs.byu.edu/~ntoronto/plot3d.png
>>
>> The first shows off the almost-finished plot2d. It's as fast as the original `plot', and `shade' is twice as fast. Props to Matthew and Linux's foreign drawing libs for making it look so nice.
>>
>> The second shows off 3d-plot-area%, which wraps a dc<%>  with 3d drawing primitives. The new plot3d will be 1.5x-2x slower, but the new features (e.g. compositing 3d plots, contours) should be worth it.
>>
>> I'll push code to github soon, and ask for volunteers to verify that it looks good on Mac and Windows.
>>
>> Specific questions
>> ------------------
>>
>> Matthew: It should look good on Mac and Windows if their drawing libs do subpixel-accurate, high-quality antialiasing. Do they?
>>
>> Doug and other heavy `plot' users: What can I add to plot2d and plot3d to make your life easier?
>>
>> Noel: Do you happen to have a kernel density estimator implementation that uses FFT or is otherwise more efficient than O(n^2)? Currently, (plot2d (density samples)) works, but is slow on large samples.
>>
>> Anyone: Are there any original `plot' features that should *not* be emulated in the new `plot' wrapper module?
>>
>> Anyone: Is it easy/possible to manipulate snip%s with, say, a click-and-drag? How about placing edit boxes on them? If it's not hard, I would like to make the 3d plots manipulatable after rendering.
>>
>> Neil T
>>
>> On 07/30/2011 02:01 PM, Jay McCarthy wrote:
>>> Yup, so that old programs will keep working.
>>>
>>> Will you support the line fitting?
>>>
>>> Jay
>>>
>>> On Sat, Jul 30, 2011 at 1:56 PM, Neil Toronto<neil.toronto at gmail.com>   wrote:
>>>> Sure can! Does "compatible source library" mean a bunch of wrappers for the
>>>> functions "plot" currently exports?
>>>>
>>>> Neil
>>>>
>>>> On 07/30/2011 05:49 AM, Jay McCarthy wrote:
>>>>> Awesome. We've been wanting to throw it out for a long time. Can you
>>>>> make a compatible source library too... so we can replace it in the
>>>>> core?
>>>>>
>>>>> Jay
>>>>>
>>>>> On Fri, Jul 29, 2011 at 10:35 PM, Neil Toronto<neil.toronto at gmail.com>
>>>>>   wrote:
>>>>>> I've attached a screenshot of what I'm working on.
>>>>>>
>>>>>> It's a replacement for Racket's plot module. The plot module has these
>>>>>> drawbacks:
>>>>>>
>>>>>> 1. It's not smart enough to automatically size plots to the things -
>>>>>> "renderers" - you're plotting. A renderer is only a function that accepts
>>>>>> an
>>>>>> image snip, so the plotter can't compute a rectangle that contains it.
>>>>>>
>>>>>> 2. It depends on an external library, plplot.
>>>>>>
>>>>>> 3. It draws ugly curves because plplot can't draw lines with
>>>>>> subpixel-accurate endpoints. Also, plplot messes up antialiasing when the
>>>>>> curves are made of too many lines. Whatever Racket uses doesn't have this
>>>>>> problem, at least on Linux.
>>>>>>
>>>>>> 4. It doesn't use parameters for things for which parameters make sense,
>>>>>> like the size of the plots.
>>>>>>
>>>>>> I could probably alter the plot module for any one or two of these and
>>>>>> submit patches. For all four, writing a replacement makes more sense.
>>>>>>
>>>>>> FWIW, this is related to my research. I've been using R to generate
>>>>>> plots,
>>>>>> but it's getting annoying to serialize samples in Racket and then
>>>>>> unserialize them in R.
>>>>>>
>>>>>> Also, Bayesians make a LOT of plots. It's *really* nice to display them
>>>>>> using image snips. That's very, very cool.
>>>>>>
>>>>>> This project feels vacation-y and relaxing. I figure it's because it
>>>>>> doesn't
>>>>>> require any more math than linear algebra. :D
>>>>>>
>>>>>> Neil
>> _________________________________________________
>> For list-related administrative tasks:
>> http://lists.racket-lang.org/listinfo/dev



Posted on the dev mailing list.