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

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Tue Aug 2 14:08:11 EDT 2011

On Tuesday, August 2, 2011, Neil Toronto <neil.toronto at gmail.com> 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?

Yes.

> 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.

Yes. See the docs for snip%.

> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/dev/archive/attachments/20110802/46951bf9/attachment.html>

Posted on the dev mailing list.