Verfasst am: 01.07.2009, 13:41
Titel: Barplot mit einem Schwellwert als Strich ergänzen
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?
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)
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.
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.
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 globalaxes;
axes= hObject;
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:
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')
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.