在Matlab中,当用户放大绘图窗口时,我想更新在一组轴上绘制的数据。例如,假设我想绘制一个解析定义的特定函数。当用户放大轨迹时,我想用额外的数据更新绘图窗口,这样他们就可以以任意分辨率检查函数。
当视图发生变化时,Matlab是否提供钩子来更新数据?(或者只是在重新绘制时?)
在Matlab中,当用户放大绘图窗口时,我想更新在一组轴上绘制的数据。例如,假设我想绘制一个解析定义的特定函数。当用户放大轨迹时,我想用额外的数据更新绘图窗口,这样他们就可以以任意分辨率检查函数。
当视图发生变化时,Matlab是否提供钩子来更新数据?(或者只是在重新绘制时?)
是的,确实如此。ZOOM模式对象具有以下回调:
ButtonDownFilter
ActionPreCallback
ActionPostCallback
后两者在缩放功能之前或之后执行。您可以在ActionPostCallback
中设置更新函数,在那里您可以根据新的轴限制更新绘图(轴的句柄作为回调的第二个输入参数传递)。
虽然我还没有找到一个通用的“重绘”回调来解决这个问题,但我已经设法拼凑出了一组四个回调*,它们似乎在(几乎?)所有情况下都能实现这个目标。对于给定的轴对象ax=gca()
,
1. Setup the zoom callback function as directed by @Jonas:
set(zoom(ax), ActionPostCallback ,@(x,y) myCallbackFcn(ax));
2. Setup a pan callback function:
set(pan(ax), ActionPostCallback ,@(x,y) myCallbackFcn(ax));
3. Setup a figure resize callback function:
set(
getParentFigure(ax)
, ResizeFcn ,@(x,y) myCallbackFcn(ax));
4.编辑:此选项在R2014b中不再有效,但仅当您向图形添加(例如,颜色条)时才需要(它可以在不更改图形大小或轴缩放/平移的情况下更改轴位置)。我没有找替代者最后,设置一个axes position属性本身的未记录属性listener。这里有一个重要的技巧:我们必须抓住handle.listener
对象的句柄,因为一旦它被删除(或离开范围),它就会删除回调。axes对象本身的UserData
属性在许多情况下是存放它的好地方。
hax = handle(ax);
hprop = findprop(hax, Position );
h = handle.listener(hax,hprop, PropertyPostSet ,@(x,y) myCallbackFcn(ax));
set(ax, UserData ,h);
在所有这些情况下,我选择放弃默认的回调事件参数,而是在匿名函数中捕获有问题的轴。我发现这比试图处理通过这些不同的回调场景传播的所有不同形式的参数要有用得多。
*此外,由于有这么多不同的回调源,我发现拥有在myCallbackFcn
的开头进行递归检查,以确保我不会陷入无限循环。
I have a data file m.txt that looks something like this (with a lot more points): 286.842995 3.444398 3.707202 338.227797 3.597597 283.740414 3.514729 3.512116 3.744235 3.365461 3.384880 Some of the ...
I want to solve these equations using MATLAB and I am sure there is a non zero solution. The equations are: 0.7071*x + 0.7071*z = x -0.5*x + 0.7071*y + 0.5*z = y -0.5*x - 0.7071*y +...
How do you read the following MATLAB codes? #1 K>> [p,d]=eig(A) // Not sure about the syntax. p = 0.5257 -0.8507 -0.8507 -0.5257 d = ...
Is there a way to transfer ownership of the data contained in a std::vector (pointed to by, say T*data) into another construct, preventing having "data" become a dangling pointer after the vector goes ...
I want to divide p(x) by q(x) given that: p(x)=-5x^4+3x^2-6x q(x)=x^2+1 I tried: p=inline( -5*(x^4)+3*(x^2) , x ) p = Inline function: p(x) = -5*(x^4)+3*(x^2) q=inline( x^2+1 , x ) q = ...
The Fibonacci series is given as follows: 1, 2, 3, 5, 8, 13, 21, ... How can I write a script which calculates and prints the n-th Fibonacci term (for n>2), where n is inputed by the user. This ...
I have a vector containing some points in 2-D space. I want MATLAB to plot these points with lines drawn from every point to every other point. Basically, I want a graph with all vertices connected. ...
I have a loop like this: for i=1:no %some calculations fid = fopen( c:\out.txt , wt ); %write something to the file fclose(fid); end I want data to be written to different files like ...