[plt-scheme] newbie - plotting points

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Wed Jan 18 16:18:20 EST 2006

Take a look at the PLoT collection. -- Matthias


On Jan 18, 2006, at 4:08 PM, andrew cooke wrote:

>
> Thanks; that's all very helpful.
>
> But maybe I should have asked a more high-level question: Is there some
> toolkit or other GUI class I should be using that lets me plot points,
> maybe draw lines?  It doesn't have to be a full-blown plotting package,
> but I'm thinking that wiring up a bitmap to provide permanent backing
> store for a canvas is the kind of thing that has already been done 
> once.
>
> To give you some idea of what I'm doing - I looked at this page
> http://blogs.msdn.com/code4bill/archive/2005/12/20/505872.aspx and 
> thought
> "Hmmm, I wonder if I would see a pattern if I plotted dots relating
> decimal numbers on one axis to progressive incrementing "Fibonacci
> numbers" on the other axis?".
>
> So the idea is to do simple exploratory graphical analysis.  I was 
> going
> to use Python then I realised that I didn't know what plotting package 
> to
> use there and that I might as well give scheme a try-out since this 
> was a
> nice toy problem....
>
> Thanks,
> Andrew
>
>
> Robby Findler wrote:
>> The canvas% objects have no memory; you must arrange for your drawing
>> code to be called on each screen refresh (you can, of course, create a
>> bitmap and just have your paint callback blit the bits, but this isn't
>> what happens by default).
>>
>> Also, you want to avoid creating so many pens; instead use 
>> the-pen-list
>> or the set-pen method as below (it hashes the pens to avoid creating
>> too many of them).
>>
>> Finally, it is good practice use modules -- all of our tools 
>> (compiler,
>> module browser, etc) work best when your code is in a module. Its easy
>> to do, just wrap "(module <fn> mzscheme ...)" around your code, where
>> <fn> is the filename where you save your code, minus the extension. In
>> the case below, the file is expected to be in a file called "tmp.ss" 
>> or
>> "tmp.scm".
>>
>> Use the `module' language to run the program (Use the language|choose
>> language ... menu item to switch).
>>
>> (module tmp mzscheme
>>   (require (lib "mred.ss" "mred")
>>            (lib "class.ss" "mzlib"))
>>
>>   (define the-frame
>>     (new frame%
>>          (label "Hello!")
>>          (width 400)
>>          (height 400)))
>>
>>   (define (draw canvas dc)
>>     (send dc set-pen "red" 5 'solid)
>>     (send dc draw-point 5 5))
>>
>>   (define the-canvas
>>     (new canvas%
>>          (paint-callback draw)
>>          (parent the-frame)))
>>
>>   (send the-frame show #t))
>>
>> hth,
>> Robby
>>
>> At Wed, 18 Jan 2006 14:20:20 -0300 (CLST), "andrew cooke" wrote:
>>> Hi,
>>>
>>> I've not programmed much in Lisp or Scheme, and have done nothing at 
>>> all
>>> for quite some years, so this may be a very stupid question...
>>>
>>> I'm trying to adapt the example at
>>> http://schemecookbook.org/Cookbook/GUIHelloWorld to plot a point on 
>>> an
>>> empty canvas.  I'm using PLT scheme, just downloaded, with the 
>>> "Pretty
>>> Big" language.
>>>
>>> My code, which runs fine, but displays no dot, is below.  Why don't I
>>> see
>>> a red dot near one of the corners of the screen?  (It doesn't work 
>>> with
>>> the deafult pen, either).
>>>
>>> Thanks,
>>> Andrew
>>>
>>> (require (lib "mred.ss" "mred")
>>>          (lib "class.ss" "mzlib"))
>>>
>>> (define the-frame
>>>   (new frame%
>>>        (label "Hello!")
>>>        (width 400)
>>>        (height 400)))
>>>
>>> (define the-canvas
>>>   (new canvas%
>>>        (parent the-frame)))
>>>
>>> (define the-pen
>>>   (let ((red (make-object color% 255 0 0)))
>>>     (make-object pen% red 5 'solid)))
>>>
>>> (define the-dot
>>>   (let ((dc (send the-canvas get-dc )))
>>>     (send dc set-pen the-pen)
>>>     (send dc draw-point 5 5)))
>>>
>>> (send the-frame show #t)
>>>
>>> --
>>> ` __ _ __ ___  ___| |_____   personal site: 
>>> http://www.acooke.org/andrew
>>>  / _` / _/ _ \/ _ \ / / -_)  blog: http://www.acooke.org/cute
>>>  \__,_\__\___/\___/_\_\___|  aim: acookeorg; skype: andrew-cooke
>>>
>>> _________________________________________________
>>>   For list-related administrative tasks:
>>>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>
>>
>
>
> _________________________________________________
>   For list-related administrative tasks:
>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme



Posted on the users mailing list.