FrameTicks-> ClickPane中的自动导致处理器活动不变

Sjo*_*ies 6 wolfram-mathematica

我发现如果选项存在,a MatrixPlotin ClickPane会导致我的一个处理器内核以大约50%的活动循环FrameTicks -> Automatic.我已将代码减少到以下(实际上没有做任何事情):

a = ConstantArray[0, {2, 11}];
ClickPane[
 Dynamic@
  MatrixPlot[a, FrameTicks -> Automatic],
 # &
 ]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

切换到FrameTicks -> None停止核心活动.

在此输入图像描述

为了研究处理器行为,我让它Clock在20秒NoneAutomatic20秒之间循环(首先删除上面的ClickPane):

ClickPane[
 Dynamic@
  MatrixPlot[a, FrameTicks -> ft],
 # &
 ]
Dynamic[ft = {Automatic, None}[[Clock[{1, 2, 1}, 20]]]]
Run Code Online (Sandbox Code Playgroud)

这给了我以下处理器活动显示:

在此输入图像描述

这是在我的Win7-64/MMA 8.0.1系统上.

我的问题是:

  • 这可以在其他系统上重现吗?
  • 我做错了什么或这是一个错误?
  • 为什么裸MatrixPlot[a](没有任何FrameTicks设置)有这些奇怪的帧勾选?

在此输入图像描述

Sjo*_*ies 4

看来Automatic该选项的设置FrameTicks改变了一个可以被看到的内部变量Dynamic。它显然(我认为是错误的)没有本地化。这导致对 的论点进行彻底的重新评估Dynamic

解决方法是添加 add Refresh,它允许使用TrackedSymbols,以便我们可以将触发限制为我们感兴趣的变量,在本例中为数组aFrameTicks选项值ft

ClickPane[
 Dynamic@
  Refresh[
   MatrixPlot[a, FrameTicks -> ft],
   TrackedSymbols -> {a, ft}],
 # &
 ]
Dynamic[ft = {Automatic, None}[[Clock[{1, 2, 1}, 20]]]]
Run Code Online (Sandbox Code Playgroud)

我的处理器状态现在保持在接近于零的水平。