我有矩阵中的数据集。我想在一组上绘图,然后使用键盘输入移动到另一组。这很可能是这样的:
for t=1:N
plot(data(:,t))
pause
end
但我想及时向前和向后移动t
(例如使用箭头)。好的,可以这样做:
direction = input('Forward or backward?','s')
if direction=='forward'
plot(data(:,ii+1))
else
plot(data(:,ii-1))
end
但没有更优雅的东西吗? (单击一次,却无法获得瞄准镜的图形 - 这是一个很大的全屏图形。)
您可以结合使用鼠标点击ginput http://www.mathworks.com/help/matlab/ref/ginput.html。你能做的就是把你的代码放在while
循环并等待用户单击屏幕上的某个位置。ginput
暂停,直到发生一些用户输入。但这必须在图形屏幕上完成。完成后,检查按了哪个键,然后采取相应的操作。左键单击意味着您将绘制下一组数据,而右击则意味着您将绘制上一组数据。
你会打电话ginput
这边走:
[x,y,b] = ginput(1);
x
and y
表示x
and y
图形窗口中发生动作的坐标b
是你按下的按钮。实际上,您不需要空间坐标,因此在调用函数时可以忽略它们。
值为 1 的值分配为左键单击,值为 3 的值分配为右键单击。另外,escape(在我的计算机上)被指定为 27。因此,您可以有一个while
循环,通过单击鼠标不断循环并绘制内容,直到您按下 escape。当发生逃逸时,退出循环并停止请求输入。
但是,如果您想使用箭头键,在我的计算机上,值 28 表示向左箭头,值 29 表示向右箭头。如果您想使用箭头键,我将在下面的代码中添加注释。
做这样的事情:
%// Generate random data
clear all; close all;
rng(123);
data = randn(100,10);
%// Show first set of points
ii = 1;
figure;
plot(data(:,ii), 'b.');
title('Data set #1');
%// Until we decide to quit...
while true
%// Get a button from the user
[~,~,b] = ginput(1);
%// Left click
%// Use this for left arrow
%// if b == 28
if b == 1
%// Check to make sure we don't go out of bounds
if ii < size(data,2)
ii = ii + 1; %// Move to the right
end
%// Right click
%// Use this for right arrow
%// elseif b == 29
elseif b == 3
if ii > 1 %// Again check for out of bounds
ii = ii - 1; %// Move to the left
end
%// Check for escape
elseif b == 27
break;
end
%// Plot new data
plot(data(:, ii), 'b.');
title(['Data set #' num2str(ii)]);
end
这是一个演示其用途的动画 GIF:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)