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

Barplot mit einem Schwellwert als Strich ergänzen

 

Dellirius
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2009, 14:41     Titel: Barplot mit einem Schwellwert als Strich ergänzen
  Antworten mit Zitat      
Hi Leute,

Ich habe einen Array mit 10 Werten die sich laufend ändern. In einem barplot werden die Daten des Arrays geplottet. Ich habe also einen animierten barplot mit 10 balken. Was ich nun machen möchte ist zu jedem dieser 10 Balken einen Schwellwert als linie hinzuzufügen, also zusätzlich in diesen plot.
Leider weiss ich nicht wie ich das realisiere. Ich hoffe jemand hat hierzu eine Idee?

Grüsse Fabian[/code]
Private Nachricht senden Benutzer-Profile anzeigen


LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2009, 16:20     Titel:
  Antworten mit Zitat      
Sieh Dir mal das nachfolgende Beispiel an. Ist das in etwa das was Du suchst? Hier wird für einen Balken ein Schwellwert bei 0.5 gesetzt.
Code:

r = rand(4,1);
bar(r)
hold on
plot([0.6,1.4],[0.5 0.5],'r')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Dellirius
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2009, 18:03     Titel:
  Antworten mit Zitat      
Hi, ich hab nun gerade festgestellt, das meine Antwort gestern nicht mehr gepostet wurde.


Es ist genau das was ich suche. Ich habe nur ein Problem, dies bei mir so anzuwenden. Es könnte evt. daran liegen das ich dies in einer Timer Funktion plotte? Den sobald ich mein GUI ausführe wird der barplot ausgeführt, anschliessend wird eine neue Figure geöffnet und im plot ist der Strich zusehen. Doch leider werden danach die Balken nicht mehr geplottet.
Ein einfaches Beispiel zu machen scheint mir nicht einfach, aber vielleicht hast du ja eine Idee wen ich dir meine Timer Funktion poste

Code:

function timer_callback(timer_object, eventdata, hObject)

global kanal1;
global axes_inhibits;

bar(axes, kanal1);
set(axes, 'YLim',[0 10],'XLim',[0 11]);
hold on
plot(axes,[0.6,1.4],[0.5 0.5],'r')
 


Ich danke aber schonmal, den du hast mir auf jedenfall einen Input gegeben, ich versuche dies Zurzeit hinzubekommen. Vielleicht noch als Info falls dir was einflällt. Inhibits_Kanal1 hat 10 Werte die mit jedem Aufruf der Timer Funktion anderst sind. Dadurch habe ich einen animierten Plot.

MFG Fabian
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2009, 22:29     Titel:
  Antworten mit Zitat      
Hallo Dellirius,

das Problem ist vermutlich, dass Du den Befehl axes als Eingabeparameter für bar, set und plot verwendest. Der Befehl erzeugt Dir eine neue Achse. Du solltest an dieser Stelle das handle auf Deine schon existierende Achse übergeben.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Dellirius
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2009, 12:08     Titel:
  Antworten mit Zitat      
Hi LittleX

Mir ist da beim posten meines Codes ein Fehler unterlaufen, korrekt ist er so:

Code:

function timer_callback(timer_object, eventdata, hObject)

global kanal1;
global axes;

bar(axes, kanal1);
set(axes, 'YLim',[0 10],'XLim',[0 11]);
hold on
plot(axes,[0.6,1.4],[0.5 0.5],'r')
 


und die Create Funktion der Axes sieht wie folgt aus:

Code:

function axes_CreateFcn(hObject, eventdata, handles)
% hObject    handle to axes_inhibits (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate axes_inhibits
global axes;
axes= hObject;
 


Ich denke du hast dies evt. so gemeint, was ich nun Versucht habe:
Code:


function timer_callback(timer_object, eventdata, hObject)

global kanal1;

bar(handles.axes, kanal1);
set(handles.axes, 'YLim',[0 10],'XLim',[0 11]);
hold on
plot(handles.axes,[0.6,1.4],[0.5 0.5],'r')
 


Ich bekomme dan folgende Fehlermeldung:

Undefined variable "handles" or class "handles.axes".

Ich habe dann versucht den handles in der timer_callback Funktion zu überbeben:

Code:

function timer_callback(timer_object, eventdata, hObject,handles)
 


Jedoch bekomme ich dann die Meldung:

Input argument "handles" is undefined.

Wo müsste ich dann die handles für axes korrektweise definieren? Oder habe ich sonst was falsch gemacht?

Grüsse Delli
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2009, 13:55     Titel:
  Antworten mit Zitat      
Hallo Dellirius,

ich schätze, das Problem liegt mit am hold on Befehl. Versuche den Befehl in der Funktionsform aufzurufen und das handle auf die Achse mit zu übergeben:
Code:
hold(handles.axes1,'on')


Ansonsten würde ich versuchen die globalen Variablen zu vermeiden (das kann leicht zu unerwünschten Seiteneffekten führen; in diesem Fall verwendest Du zusätzlich axes als Variablennamen und überdeckst Dir damit eine MATLAB Funktion).

Das timer Objekt hat ein Feld 'UserData', in dem Du z.B. die handle Struktur speichern kannst. Deine Kanal-Daten könntest Du mit setappdata als Applikationsdaten speichern (und mit getappdata wieder auslesen).

Beispiel:
Code:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
t = timer('TimerFcn',@mycallback,...  % this function will be executed when timer triggers
    'Period', 1,...                  % delay between two calls: 1sec
    'ExecutionMode','FixedDelay',... % see doc "ExecutionMode"; default: SingleShot
    'UserData',handles,...
    'TasksToExecute',5);             % trigger 5 times; inf possible
start(t)

function mycallback(varargin)
t = varargin{1};
handles = get(t,'userdata');
R = getappdata(handles.figure1,'R');
b = bar(handles.axes1,R);
hold(handles.axes1,'on')
plot(handles.axes1,[0.6,1.4],[R(1)/2,R(1)/2],'r')
hold(handles.axes1,'off')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Dellirius
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2009, 15:02     Titel:
  Antworten mit Zitat      
Hey LittleX

Vielen Dank für deine Hilfe und Zeit. Du hast mir geholfen, es hat geklappt und zwar folgend:

Code:

    plot(axes,[0.6,1.4],[0.5 0.5],'r')
    hold(axes,'on');
    bar(axes, kanal1,'b');
    hold(axes,'off');
 


MFG Dellirius
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 - 2024 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.