ich habe eine GUI in welcher ich 2 Axes plaziert habe. In diesen beiden Axes plotte ich die jeweiligen Daten.
Bis auf xlabel und ylabel habe ich keine Settings an Axes vorgenommen.
Meine Frage ist nun, wie kann man für die beiden erreichen, dass ich die geplotteten Daten zoomen kann? Wenn man ein Figure geöffnet hat, kann man ja über die Toolbar das Zoom-Werkzeug auswählen. Diese Option habe ich aktuelle eben nicht. Außerdem möchte ich gerne die beiden Axes über linkaxes miteinander verknüpfen.
Ich erstelle die GUI mit dem GUIDE und habe aktuelle die Menübar/Toolbar deaktiviert, ich weiß, dass man hier ein solches Zoom-Werkzeug hinzufügen könnte. Die Frage ist, ist dies nötig?
Dann sollte dir die Zoom Funktion zur Verfügung stehen, wenn du mit der Maus über den Plot gehst.
Du könntest auch eine abgespeckte Toolbar hinzufügen, die nur die Zoom und Verschiebfunktion beinhaltet.
In den OpeningFcn der GUI muss dann folgendes hinzugefügt werden.
Code:
%add Toolbar forZoom in / out and Pan
figureToolBar = uimenu('Label','Zoom Functions');
uimenu(figureToolBar,'Label','Zoom In','Callback','zoom on');
uimenu(figureToolBar,'Label','Zoom Out','Callback','zoom out');
uimenu(figureToolBar,'Label','Pan','Callback','pan on');
ich fand die zweite Variante von dir prinzipiell ganz super. ich hab ein GUI in dem ich ein zeit signal plotte und mittels verschiebbaren cursoren eine ROI festlege. es wäre sinnvoll die zeitsignale auch zoomen zu können um den cursor genauer zu positionieren.
mein problem ist jetzt, dass ich sobald ich einmal gezoomt habe auf dem plot nicht mehr den cursor bewegen kann, weil sofort das zoom-zeichen erscheint, sobald ich mich dort hin bewege. gibt es die möglichkeit, nur dann zu zoomen, wenn die aktion gewünscht ist und danach kann ich in meinem modus weitermachen?
es wäre ganz gut, wenn du einen Beispiel Code posten könntest. Hellsehen kann hier keiner. Als kleine Info kann ich sagen, dass du jedem Callback natürlich auch eine Funktion zuweisen kannst indem du Abfragen kannst was gemacht werden soll...
z.B.
Code:
%add Toolbar forZoom in / out and Pan
figureToolBar = uimenu('Label','Zoom Functions');
uimenu(figureToolBar,'Label','Zoom In','Callback',@DeinZoomInCB);
uimenu(figureToolBar,'Label','Zoom Out','Callback',@DeinZoomOutCB);
uimenu(figureToolBar,'Label','Pan','Callback',@DeinPanCB);
function DeinZoomInCB(hobj,evd) % mach irgendwtwas
function DeinZoomOutCB(hobj,evd) % mach irgendwtwas
Ja an sowas wie mit der Callback-Zuweisung hab ich auch schon gedacht, nur nicht hinbekommen... wie gesagt, ich möchte die Cursoren in meiner Zeitreihe verschieben können, auch nachdem ich in meine axes gezoomt habe und nachdem ich wieder rausgezoomt habe. die zoom-Funktion sollte nur aktiv sein, wenn ich sie gerade zuvor ausgewählt habe...
Also hier mal der Anfang meines GUI's zur Auswertung der Zeitreihe:
Code:
}%
functionvarargout = test_zeitsignal_cursor(varargin) % TEST_ZEITSIGNAL_CURSOR MATLAB code for test_zeitsignal_cursor.fig % TEST_ZEITSIGNAL_CURSOR, by itself, creates a new TEST_ZEITSIGNAL_CURSOR or raises the existing % singleton*.
%
% H = TEST_ZEITSIGNAL_CURSOR returns the handle to a new TEST_ZEITSIGNAL_CURSOR or the handle to % the existing singleton*.
%
% TEST_ZEITSIGNAL_CURSOR('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in TEST_ZEITSIGNAL_CURSOR.M with the given input arguments.
%
% TEST_ZEITSIGNAL_CURSOR('Property','Value',...) creates a new TEST_ZEITSIGNAL_CURSOR or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before test_zeitsignal_cursor_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to test_zeitsignal_cursor_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help test_zeitsignal_cursor
% Last Modified by GUIDE v2.5 06-Sep-2012 11:01:41
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @test_zeitsignal_cursor_OpeningFcn, ...
'gui_OutputFcn', @test_zeitsignal_cursor_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
ifnargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
% --- Executes just before test_zeitsignal_cursor is made visible. function test_zeitsignal_cursor_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to test_zeitsignal_cursor (see VARARGIN)
% Choose default command line output for test_zeitsignal_cursor
handles.output = hObject;
handles.z=hObject; %Initialisierung des Zählers für Anzahl der Cursor
handles.z=0;
%add Toolbar forZoom in / out and Pan
figureToolBar = uimenu('Label','Zoom Functions');
uimenu(figureToolBar,'Label','Zoom In','Callback',{@MeinZoomIn_CallBack, handles});
uimenu(figureToolBar,'Label','Zoom Out','Callback',{@MeinZoomOut_BallBack, handles});
% UIWAIT makes test_zeitsignal_cursor wait for user response (see UIRESUME) % uiwait(handles.figure1);
function MeinZoomIn_CallBack (hobj,evd,handles) set(handles.figure1,'WindowButtonDownFcn','zoom on');
function MeinZoomOut_BallBack (hobj, evd,handles) set(handles.figure1,'WindowButtonDownFcn','zoom out');
% --- Outputs from this function are returned to the command line. functionvarargout = test_zeitsignal_cursor_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output;
%------------------------------------------------------------------------------------------
% --- Executes on button press in load_and_plot. function load_and_plot_Callback(hObject, eventdata, handles) % hObject handle to load_and_plot (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
plot(nums(:,1),nums(:,2));
hold on;
plot(nums(:,1),nums(:,3),'r');
%-------------------------------------------------------------------------------------------
% --- Executes on button press in cursor. function cursor_Callback(hObject, eventdata, handles) % hObject handle to cursor (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
function stopDragFcn(hObject, eventdata, handles) set(handles.figure1,'WindowButtonMotionFcn', ' ');
handles.z=handles.z+1; %Zaehler+1 guidata(hObject, handles);
set(handles.anzahl_cursor,'String',num2str(handles.z)); %Ausgabe der Anzahl der Cursor im Textfeld
%--------------------------------------------------------------------------------------------
ich bin noch verhältnismäßig Anfänger auf dem Gebiet der Programmierung (oder zmindest der sinnvollen Anwendung). deswegen fehlt an manchen Ecken das Verständnis und die Übung an welcher Stelle welche Anweisungen sinnvoll sind...
Danke schonmal im Voraus!
Pepsi
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.09.2012, 07:59
Titel:
der Schreibfehler bei CallBack wurde behoben (bringt aber auch nichts...)
mir sit auch aufgefallen, dass ich jetzt mehrfach in die axes hineinklicken muss, bevor ich mit einem Klick wieder komplett hinaus zoomen kann...
vg, Pepsi
Pepsi
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.09.2012, 08:40
Titel:
ok, ich hab eine einfache Lösung für mcih selbst gefunden.... manchmal denkt man zu kompliziert...
damit funktionierts so einfach, wie ic es gern hätte:
Die kann man für gewisse Dinge ganz gut verwenden...
Greetings
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.