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