MATLAB Answers

Translated by

このページのコンテンツは英語から自動翻訳されています。自動翻訳をオフにする場合は「<a class="turn_off_mt" href="#" onclick="window._kiq.push(['set', { 'event': 'Turn off MT' }]);">ここ</a>」をクリックしてください。

0

Slider Code problem with axes

Hassan Bosha さんによって質問されました 2019 年 2 月 16 日
最新アクティビティ Rik
さんによって コメントされました 2019 年 2 月 20 日
this an example of a slider to control movement on axes
a = get (handles.slider2,'Value')
x = 0:0.1:50;
y = sin (x*a);
plot (handles.axes1,x,y)
and this me trying to apply the example
function slider2_Callback(hObject, eventdata, handles)
% hObject handle to slider2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'Value') returns position of slider
% get(hObject,'Min') and get(hObject,'Max') to determine range of slider
clc;
load ('100m.mat')
a = get(handles.slider2,'Value');
x = 0:0.1:50;
ECGsignal = (val - 1024 )/200;
y = ECGsignal*x*a;
plot (handles.axes1,x,y)
what is the problem in my code ?

  4 件のコメント

Hassan Bosha 2019 年 2 月 16 日
ECGsignal is a matrix signal and i need to connect it with a and x as the first example
the attached photo display what occurs when i move the slidermat.png
Rik
2019 年 2 月 18 日
If you want to scroll through your data, why don't you use the Value property of the slider to change the XLim property of your axes object?
Hassan Bosha 2019 年 2 月 19 日
can you show me a example code for it ?

サインイン to comment.

タグ

2 件の回答

Rik
回答者: Rik
2019 年 2 月 19 日
 採用された回答

Instead of scaling the data, this code changes the axis limits.
%generate some data and set the x window size
x=linspace(0,50,1000);
y=sin(exp(x/10));
xwindow_size=20;
xwindow_min=min(x);
xwindow_max=max(x);
%make the GUI
h=struct;
h.f=figure(1);
clf(h.f)%make sure the figure is empty, not needed if you use h.f=figure;
h.xwindow_size=xwindow_size;
h.xwindow_min=xwindow_min;
h.xwindow_max=xwindow_max;
h.ax=axes('Parent',h.f,...
'Units','Normalized',...
'Position',[0.1 0.3 0.8 0.6]);
h.slider=uicontrol('Parent',h.f,...
'Style','slider',...
'Value',h.xwindow_min+h.xwindow_size/2,...
'min',h.xwindow_min+h.xwindow_size/2,...
'max',h.xwindow_max-h.xwindow_size/2,...
'Units','Normalized',...
'Position',[0.1 0.1 0.8 0.1],...
'Callback',@sliderCallback);
guidata(h.f,h)
%make the plot
plot(x,y,'Parent',h.ax)%create the plot itself
%set(h.ax,'YLim',[min(y) max(y)])%fix the y-axis to specific values
set(h.ax,'YLim',[-1 1])%fix the y-axis to specific values
sliderCallback(h.f)%initialize the x-axis
function sliderCallback(obj,evnt)
handles=guidata(obj);
a=get(handles.slider,'Value');
set(handles.ax,'XLim',[-0.5 0.5]*handles.xwindow_size+a)
end

  11 件のコメント

Hassan Bosha 2019 年 2 月 19 日
That's perfect , all i need is to fit it on the my GUI Code , any idea how ?
Hassan Bosha 2019 年 2 月 19 日
% --- Executes on slider movement.
function slider4_Callback(hObject, eventdata, handles)
load ('100m.mat')
y = (val - 1024 )/200;
Fs = 360;
x = (0:length(y)-1)/Fs ;
xwindow_size=1;
%set(h.ax,'YLim',[min(y) max(y)])%fix the y-axis to specific values
set(h.ax,'YLim',[floor(min(y)) ceil(max(y))])%fix the y-axis to specific values
handles=guidata(hObject);
a=get(handles.slider,'Value');
set(handles.ax,'XLim',[-0.5 0.5]*handles.xwindow_size+a)
% --- Executes during object creation, after setting all properties.
function slider4_CreateFcn(hObject, eventdata, handles)
% hObject handle to slider4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end
What could be wrong here ?
What h.ax should be replaced with ?
and can i create a code for the slider with its function in a GUI mode ?
Rik
2019 年 2 月 20 日
handles.ax should be replaced by whatever the handle for your axes object is, likely handles.axes1. And again, you have put code in your callback that loads data. That is something you should put in the createFcn of your GUI (or is it called startFcn?). A callback should be treated as an interupt: as little work as possible should be done in them. A callback will trigger often, every 200 ms you spend on loading that mat introduces 200 ms of delay.
% --- Executes on slider movement.
function slider4_Callback(hObject, eventdata, handles)
a=get(handles.slider,'Value');
set(handles.ax,'XLim',[-0.5 0.5]*handles.xwindow_size+a)

サインイン to comment.


Yair Altman
回答者: Yair Altman
2019 年 2 月 17 日

In your example, both val and x are not scalars. When you multiply vectors/matrices in Matlab using the * operator, Matlab uses linear algebra rules to multiply the data. This causes an error because the two variables do not match in their size as required by linear algebra multiplication rules (that the number of rows in one multiplicant is equal to the number of columns in the other).
What you probably wanted to do instead was to multiple each element of val by the corresponding element in x (assuming that they are both vectors of the same size) - this is done with element-wise multiplication (.*) :
y = ECGsignal.*x*a;

  1 件のコメント

Hassan Bosha 2019 年 2 月 18 日
still same problem , i just need a code to move the slider on zooming

サインイン to comment.



Translated by