WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

GUI - Plot in axes zoomen?

 

Martinuk
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 18.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2012, 13:27     Titel: GUI - Plot in axes zoomen?
  Antworten mit Zitat      
Hallo,

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?

Wäre super wenn jemand eine Idee dazu hätte.

Besten Dank.
Private Nachricht senden Benutzer-Profile anzeigen


draussen
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 15.08.2012, 13:36     Titel:
  Antworten mit Zitat      
Hallo,

in meinen guis löse ich das immer indem ich den figure toolbar einfüge:

Code:

set(handles.figure1,'Toolbar','figure');
 


MfG

Georg
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
stef0n
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 25.05.12
Wohnort: Shanghai
Version: R2007B
     Beitrag Verfasst am: 15.08.2012, 13:40     Titel:
  Antworten mit Zitat      
Hi,
setze unter dem plot Befehl

Code:


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 for Zoom 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');
Private Nachricht senden Benutzer-Profile anzeigen
 
Martinuk
Themenstarter

Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 18.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.08.2012, 14:49     Titel:
  Antworten mit Zitat      
Hallo,

danke für die rasche Antwort.

Eure Vorschläge funktionieren für sich wunderbar.

Danke und noch einen schönen Tag.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pepsi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2012, 09:59     Titel:
  Antworten mit Zitat      
hallo Stef0n,

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?

vg
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 07.09.2012, 20:45     Titel:
  Antworten mit Zitat      
Hey,

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 for Zoom 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

function DeinPanCB(hObj,evd)
% mach irgendwtwas

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Pepsi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2012, 07:46     Titel:
  Antworten mit Zitat      
Hallo Marco!

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:
}%
function varargout = 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',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- 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 for Zoom 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});


% Update handles structure
guidata(hObject, 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.
function varargout = 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)

filename = uigetfile ('*.xls');
[nums, txt] =xlsread(filename);

axes(handles.axes1);
cla;

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)

findobj(gca)     ;
        cursor =line('XData',[0,0],'YData',[-12,12],'Color','r','Linewidth',1.8,'ButtonDownFcn',{@startDragFcn,handles})   %cursor
        set(handles.figure1,'WindowButtonUpFcn',{@stopDragFcn,handles});

       function startDragFcn(hObject, eventdata, handles)
        set(handles.figure1, 'WindowButtonMotionFcn', {@draggingFcn,handles,hObject});

   
function draggingFcn(hObject, eventdata, handles,cursor)
        pt = get(handles.axes1, 'CurrentPoint');
        set(cursor, 'XData', pt(1)*[1 1]);
       

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: ---
     Beitrag Verfasst am: 10.09.2012, 07:59     Titel:
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 10.09.2012, 08:40     Titel:
  Antworten mit Zitat      
ok, ich hab eine einfache Lösung für mcih selbst gefunden.... manchmal denkt man zu kompliziert... Wink

damit funktionierts so einfach, wie ic es gern hätte:

Code:
%
figureToolBar = uimenu('Label','Zoom Functions');
uimenu(figureToolBar,'Label','Zoom In','Callback','zoom on');              
uimenu(figureToolBar,'Label','Zoom Out','Callback','zoom out');            
uimenu(figureToolBar,'Label','Zoom Off','Callback','zoom off');
 
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 10.09.2012, 22:01     Titel:
  Antworten mit Zitat      
Hey,

es gibt aber auch noch eine undocumented function (cursobar) -> http://undocumentedmatlab.com/blog/undocumented-cursorbar-object/

Die kann man für gewisse Dinge ganz gut verwenden...

Greetings
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.