# [racket] Plot: #:samples parameter of function---is this what was meant?

 From: Neil Toronto (neil.toronto at gmail.com) Date: Fri Apr 27 16:30:53 EDT 2012 Previous message: [racket] Plot: #:samples parameter of function---is this what was meant? Next message: [racket] Plot: #:samples parameter of function---is this what was meant? Messages sorted by: [date] [thread] [subject] [author]

```Sorry it took so long to reply. I let my email backlog get too large.

On 04/18/2012 01:27 PM, Deren Dohoda wrote:
> This is very counter-intuitive to me:
>
> #lang racket
> (require plot)
>
> (plot (list (axes)
>              (function (λ(x) (* x x)) #:samples 4 -2 0) ; 2 samples?!
>              (function (λ(x) (* x x)) #:samples 8 0 2))) ; 4 samples?!
>
> It is really surprising to suppose that the number of samples isn't
> specifying the number of times to sample this function *in the range

It's because of how I abstracted sampling for renderers that graph one-,
two- and three-input functions. Try this 3D plot:

#lang racket
(require plot)

(plot3d (list (contour-intervals3d (λ (x y) (* x (+ (abs x) (abs y))))
-1.05 0 -2 2)
(contour-intervals3d (λ (x y) (* x (+ (sqr x) (sqr y))))
0 2.95 -2 2)))

If each renderer returned by `contour-intervals3d' sampled 41 points in
its x-axis bounds, the left half of the plot would be made of tiny
rectangles, and the right half would be made of large ones. Ugliness!

Another reason is that polygons are a lot easier to sort by depth if
they're on a grid. To ensure the polygons are put on a grid, both
renderers sample their functions at the same points even though they
have different bounds.

(If you were wondering, 3D polygons have to be sorted by depth and drawn
back-to-front. Racket's device contexts don't have depth buffers, and
neither do PDFs.)

The renderers returned by `function' use the same sampling code as those
returned by `contour-intervals3d'. So... there's a good reason.

I honestly didn't think anybody would mind. Noticeable discretization in
a 2D graph is generally a bad thing. But if you want it noticeable,
you'd have more control using `lines':

#lang racket
(require plot plot/utils)

(define (x-sqr-x x) (vector x (sqr x)))
(plot (list (lines (map x-sqr-x (linear-seq -2 0 4)))
(lines (map x-sqr-x (linear-seq 0 2 8)))))

But that's like... like plotting things in R. Icky. :P

Neil ⊥
```

 Posted on the users mailing list. Previous message: [racket] Plot: #:samples parameter of function---is this what was meant? Next message: [racket] Plot: #:samples parameter of function---is this what was meant? Messages sorted by: [date] [thread] [subject] [author]