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

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Tue Aug 2 14:38:27 EDT 2011

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.