【问题标题】:How to programmatically invoke zoom event in MatLab?如何在 MatLab 中以编程方式调用缩放事件?
【发布时间】:2013-01-28 17:41:48
【问题描述】:

我正在使用“plot_google_map.m”,它使用 Google Maps API 在当前图形的背景中绘制地图。使用此生成的图形会在缩放事件时自动刷新地图,我添加了一些代码以使其在平移事件时也刷新数据。

现在我想在不使用缩放或平移按钮的情况下以编程方式更改轴的范围,但问题是地图没有自动刷新。所以,我正在考虑以编程方式生成缩放或平移事件,但我还没有找到一种方法来做到这一点。 对此有什么想法吗?

让我详细说明我的问题。 在'plot_google_map.m'中,有一个子函数是缩放事件的回调。

function plot_google_map  
% Listen to Zoom events    
h  = figure(1); plot(1:10);
hz = zoom(h);
set(hz,'ActionPostCallback',@mypostcallback);

function mypostcallback(obj,evd)
disp('Refreshes map data');

我想做的是,在“plot_google_map”之外调用这个子函数。
欢迎任何想法,并提前感谢您的回答!

【问题讨论】:

  • help axis 是否包含缩放所需的信息?

标签: matlab callback


【解决方案1】:

您听说过zoom 命令吗?

>> help zoom
 zoom   Zoom in and out on a 2-D plot.

实际上,这似乎是程序识别您缩放的方式。

【讨论】:

  • 谢谢bdecaf,但我还没有找到解决这个问题的方法。所以我添加了一些示例代码来解释我的问题。请也看看这个。
  • 所以如果您使用get(hz,'ActionPostCallback') 获得原始图形句柄 - 您不应该能够执行它吗?
  • 太棒了!这是我正在寻找的确切解决方案。现在我知道如何获取缩放回调的句柄,并使用检索到的句柄执行它。谢谢bdecaf。
【解决方案2】:

假设您的坐标区句柄是hAxes,那么您可以通过更改坐标区的xLimyLim 属性而不是缩放比例来进行缩放,如下所示:

如果您的绘图使用 0-100 的 x 轴,那么您可以放大特定的子范围 og 0-100,例如:

set(hAxes,'xLim',[20 40])

对于 y 轴,您可以放大特定的 y 范围:

set(hAxes,'xLim',[30 70])

如果您想放大绘图上的特定区域,例如 x[20-50],y[10-50],您可以通过执行前两个操作来实现,例如:

set(hAxes,'xLim',[20 50])
set(hAxes,'yLim',[10 50])


所以,根据绘图或图像的大小更改轴的 xLimyLim 值,这就是缩放轴的实际工作方式。 p>

你甚至可以试试这个演示脚本:

 clear;clc;
 figure;
 h = axes;
 y = sin( 0:2*pi / 100:pi );
 plot(y);
 %// =============================
 pause(1);
 set(h , 'xlim' , [20 80]);
 %// =============================
 pause(1);
 set(h , 'xlim' , [30 40]);
 %// =============================
 pause(1);
 set(h , 'xlim' , [10 100]);
 %// =============================
 pause(1);
 set(h , 'ylim' , [.1 .4]);
 %// =============================
 pause(1);
 set(h , 'ylim' , [.2 .7]);
 %// =============================
 pause(1);
 set(h , 'ylim' , [.3 .9]);
 %// =============================
 pause(1);
 set(h , 'ylim' , [.1 .2]);
 set(h , 'xlim' , [10 80]);
 %// =============================
 pause(1);
 set(h , 'ylim' , [.3 .7]);
 set(h , 'xlim' , [40 90]);
 %// =============================

【讨论】:

  • 谢谢萨米。我已经尝试过你的建议,但设置“xTick”只会改变轴的标签。
  • @SeungwooNoh .. 很抱歉不是 xTickyTick ,而是 xLimyLim
  • @SeungwooNoh ,我已经修复了代码并添加了一个用于缩放轴的演示。
  • 再次感谢萨米。您的 cmets 和示例代码对解决我的问题非常有帮助。
【解决方案3】:

为什么不在每次更改坐标轴范围后再次调用 plot_google_map 呢? 这将导致地图更新为新范围。

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多