具有不同颜色的球拍散点图
Scatter plot in racket with individual colors
我正在探索 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
代码提出任何(和所有)评论,例如简化绘图的边界规范。
plot
function accepts a list of renderers (more generally, a tree of 渲染器),每个单独的渲染器都可以提供自己的颜色。
此外,自 Plot 5.2 起,plot
函数将在可能的情况下自动缩放绘图的边界以适应数据。显然,这不适用于 (function sin)
之类的东西,它是无界的,但是对于 points
数据,如果不需要自定义边界,自动缩放就足够了。
根据@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")))))
我正在探索 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
代码提出任何(和所有)评论,例如简化绘图的边界规范。
plot
function accepts a list of renderers (more generally, a tree of 渲染器),每个单独的渲染器都可以提供自己的颜色。
此外,自 Plot 5.2 起,plot
函数将在可能的情况下自动缩放绘图的边界以适应数据。显然,这不适用于 (function sin)
之类的东西,它是无界的,但是对于 points
数据,如果不需要自定义边界,自动缩放就足够了。
根据@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")))))