球拍实时图/图表

时间:2016-06-01 05:06:55

标签: plot graph charts racket real-time-updates

我正在尝试用球拍制作实时图表。我看过Plot和GUI库,看起来我错过了一些东西。调用plot时,它会返回图像片段%或许多其他图片格式。但我似乎无法找到任何方法来添加或删除图表中的点,而无需再次调用绘图。现在我想我可以使用像

这样的方法

https://planet.racket-lang.org/package-source/williams/animated-canvas.plt/2/5/planet-docs/animated-canvas/index.html

然后我必须重新实现snip%附带的所有操作机制。现在可能是我必须要这样做了,但我要问的是,是否有任何现有的机制可以让你在创建之后操纵图表剪辑的数据和数据,或者我必须每次我想改变它的外观时,只需手动重绘它?还有任何现有的工作已经完成在Racket中制作实时图表吗?

1 个答案:

答案 0 :(得分:0)

在深入研究Rackets OOP和gui库之后,我最终发现(并理解)了文档声称可用于此类应用程序的plot / dc:https://docs.racket-lang.org/plot/plotting.html?q=plot%2Fdc#%28def._%28%28lib._plot%2Fmain..rkt%29._plot%2Fdc%29%29

渲染时似乎比动画画布更好,但我仍然需要重新实现缩放和点击以及剪辑%s附带的所有内容,除非有人有更好的想法。

#lang racket

(require racket/gui plot racket/draw)

(define num 0)

(define f (new frame% [label "Test graph"]
               [width 200]
               [height 200]))
(define c (new canvas% [parent f]))


(send f show #t)

(define (loop)
  (set! num (add1 num))
  (plot/dc (function sin (- pi) num)
           (send c get-dc)
           0 0
           (- (send f get-width) 40) ;; figure out how to get the actual size of the text outside the graphs boarder?
           (- (send f get-height) 40)
           #:title "Graph"
           #:x-label "num"
           #:y-label "sin"
           )
  (sleep/yield .2)
  (loop))

(loop)