我使用下面的代码绘制串口数据。由于我有两个绘图轴,如何为该绘图选择特定的轴? 从类似的问题,我发现他们使用轴(handles.axes2);.由于我在程序开始时声明了绘图,我应该在哪里放置这行代码?我在指定剧情标题等之前尝试放置它但是它没有用。
% Serial Data Logger
% Yu Hin Hau
% 7/9/2013
% **CLOSE PLOT TO END SESSION
clear
clc
%User Defined Properties
serialPort = 'COM5'; % define COM port #
plotTitle = 'Serial Data Log'; % plot title
xLabel = 'Elapsed Time (s)'; % x-axis label
yLabel = 'Data'; % y-axis label
plotGrid = 'on'; % 'off' to turn off grid
min = -1.5; % set y-min
max = 1.5; % set y-max
scrollWidth = 10; % display period in plot, plot entire data log if <= 0
delay = .01; % make sure sample faster than resolution
%Define Function Variables
time = 0;
data = 0;
count = 0;
%Set up Plot
plotGraph = plot(time,data,'-mo',...
'LineWidth',1,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[.49 1 .63],...
'MarkerSize',2);
title(plotTitle,'FontSize',25);
xlabel(xLabel,'FontSize',15);
ylabel(yLabel,'FontSize',15);
axis([0 10 min max]);
grid(plotGrid);
%Open Serial COM Port
s = serial(serialPort)
disp('Close Plot to End Session');
fopen(s);
tic
while ishandle(plotGraph) %Loop when Plot is Active
dat = fscanf(s,'%f'); %Read Data from Serial as Float
if(~isempty(dat) && isfloat(dat)) %Make sure Data Type is Correct
count = count + 1;
time(count) = toc; %Extract Elapsed Time
data(count) = dat(1); %Extract 1st Data Element
%Set Axis according to Scroll Width
if(scrollWidth > 0)
set(plotGraph,'XData',time(time > time(count)-scrollWidth),'YData',data(time > time(count)-scrollWidth));
axis([time(count)-scrollWidth time(count) min max]);
else
set(plotGraph,'XData',time,'YData',data);
axis([0 time(count) min max]);
end
%Allow MATLAB to Update Plot
pause(delay);
end
end
%Close Serial COM Port and Delete useless Variables
fclose(s);
clear count dat delay max min plotGraph plotGrid plotTitle s ...
scrollWidth serialPort xLabel yLabel;
disp('Session Terminated...');
答案 0 :(得分:4)
获得可靠的绘图和操作的技巧是在创建plot
或任何其他图形对象时始终使用Parent
parameter明确指定父。所有图形对象都支持此参数。
hax = axes();
plot(x,y, 'Parent', hax);
@matlabgui建议的另一种选择是将父轴指定为plot
的第一个输入:
plot(hax, x, y);
我个人更喜欢使用Parent
参数作为参数值对,因为该行为在所有图形对象中是一致的。
使用在轴上操作的其他功能时,还应指定轴手柄。
xlabel(hax, 'XLabel')
ylabel(hax, 'YLabel')
title(hax, 'This is a title')
axis(hax, [0 0 1 1])
grid(hax, 'on')
hold(hax, 'on')
如果您正在处理交互式GUI,这一点尤为重要,因为用户可以在绘图过程中轻松点击不同的轴,导致gca
的值意外更改。同时更改当前轴(使用axes(hax)
)可能会导致糟糕的用户体验。
对于您的特定代码,这将涉及更改您的初始plot
电话:
plotGraph = plot(time,data,'-mo',...
'LineWidth',1,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[.49 1 .63],...
'MarkerSize',2, ...
'Parent', handles.axes2);
我还建议为您的调用添加显式轴句柄:grid
,title
,axis
,xlabel
和ylabel
,以确保他们的target是你想要的轴。