球拍中的散点图与各种颜色

时间:2015-03-02 05:44:44

标签: plot racket

我正在探索racket中的绘图工具,我不得不说,到目前为止,我印象非常深刻。但是,我遇到了一个小困难。

我试图制作一个散点图,每个点都有自己的颜色(用于可视化分类算法)。但是,我不确定如何让每个点都有自己的颜色。有可能吗?

这是我到目前为止所尝试的内容:

(define (random-choice l)
  (list-ref l (random (length l))))

(define (scatter data)
  (let ([x-max (apply max (map first data))]
        [x-min (apply min (map first data))]
        [y-max (apply max (map second data))]
        [y-min (apply min (map second data))]
        [colors (build-list 20 
            ; here I am trying to create a list of desired colors
            ; ,but an error tells me that only single elements are accepted
            (λ _ (random-choice (list "red" "blue")))])
    (parameterize ([plot-new-window? #t]
                   [point-sym 'dot]
                   [point-size 20])
      (plot (points data
            #:color colors)
            #:x-max x-max
            #:x-min x-min
            #:y-max y-max
            #:y-min y-min))))

R中的粗略等价物是:

c <- data.frame(x=rnorm(10),y=rnorm(10))
colors <- sample(c("red","blue"),10,replace=TRUE)
plot(c$y,c$x,col=colors)

顺便说一下,我欢迎任何(和所有)评论我的racket代码,例如简化情节的边界规范。

2 个答案:

答案 0 :(得分:2)

plot函数接受渲染器列表(更常见的是tree of渲染器),并且每个渲染器都可以提供自己的颜色。

此外,自Plot 5.2起,如果可能,plot函数将自动缩放图的边界以适合数据。显然,这不适用于(function sin)这样无限制的事情,但对于points数据,如果不需要自定义边界,自动缩放就足够了。

答案 1 :(得分:1)

根据@Alexis King的建议,我最终得到了一个两组的简单案例。写下后人。

(define-struct datum [point label])

(define (color-scatter data)
  (let-values 
      ([(group-a group-b) (partition (λ (x) (= 1 (datum-label x))) data)])
    (plot (list
           (points (map datum-point group-a) #:color "red")
           (points (map datum-point group-b) #:color "blue")))))