Unix:像Mathematica一样让鼠标坐在X上?

时间:2012-08-22 17:42:12

标签: python r language-agnostic wolfram-mathematica x11

数学

DynamicModule[{list = {}}, 
 EventHandler[
  Dynamic[Framed@
    Graphics[{BSplineCurve[list], Red, Line[list], Point[list]}, 
     PlotRange -> 2]], {{"MouseClicked", 
     1} :> {AppendTo[list, 
      MousePosition["Graphics"]]}}, {"MouseClicked", 2} :> 
   Print[list]]]

我想在没有Mathematica的家里做上述事情。使用你想要的任何工具,我喜欢使用Python和R,但对任何候选解决方案都很满意。我想到的第一件事是RStudio和这个问题here,但我不确定是否有更好的方法来做到这一点。

如何通过X进行交互式GUI创新?

Mathematica -snippet的程序概述

1. you click points

2. you will see BSplineCurve formating between the points and points are red

3. points are saved to an array

4. when finished, you click `right-mouse-button` so array to stdout

3 个答案:

答案 0 :(得分:5)

这是一个执行你所描述的R函数:

dynmodfunc <- function() {
    plot(0:1,0:1,ann=FALSE,type='n')
    mypoints <- matrix(ncol=2, nrow=0)
    while( length(p <- locator(1, type='p', col='red')) ) {
        mypoints <- rbind(mypoints, unlist(p))
        plot(mypoints, col='red', ann=FALSE, xlim=0:1, ylim=0:1)
        if(nrow(mypoints)>1) {
            xspline(mypoints, shape=-1)
        }
    }
    mypoints
}

(out <- dynmodfunc())

您可以将shape参数更改为xspline以更改样条线的样式。此版本返回带有x和y值的2列矩阵,但如果愿意,可以将其更改为其他结构。还有很多其他的东西也可以自定义。

添加了将输出粘贴到Mathematica中的函数:

matrix2mathematica <- function(x) {
    paste0( '{', 
        paste0( '{', x[,1], ', ', x[,2], '}', collapse=', '),
    '}')
}

cat( matrix2mathematica(out))

答案 1 :(得分:1)

随意查看/获取R中我的dorky,buggy,RateSketch()函数,它执行类似here的操作。你可以把它简化为你的情况,有足够的简化空间

答案 2 :(得分:1)

只是locator的一个简单示例:

plot(1:10)
point <- locator(1)
# now click somewhere on the plot

point
$x
[1] 8.010256

$y
[1] 7.980781

(结果当然会因您点击的位置而异)