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

Plotfunktion refreshdata

 

gast257

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2014, 17:23     Titel: Plotfunktion refreshdata
  Antworten mit Zitat      
Hallo,

meine Plotfunktion sieht in etwas so aus:
[fh,ah] = meinePlotFunc(handles,x1,y1,x2,y2,x3,y3,x4,y4)

Input:
-Eingang ist variabel in
-x1,y1,x2,... sind Strukturen
-handles ist aus meiner GUI

Output:
- fh ist das FigureHandle
- ah ist das AxesHandle

Nun zum Problem:
Die Plotfunktion ruft ein neues Figure auf und zeichnet die "Kurven".
Ändern sich die Werte von x1,y1,... ändert dies nichts am Plot, erst wenn ich die Funktion nochmals aufrufe. Ich möchte aber, dass sich bei Ändern der Eingangswerte auch die Plotfunktion "aktualisiert".

Versucht habe ich es mit
set(fh,{'YDataSource'},{'y1','y2','y3','y4'}')
set(fh,'{XDataSource'},{'x1','x2','x3','x4'}')
refreshdata

Funktioniert aber nicht!


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.01.2014, 17:37     Titel:
  Antworten mit Zitat      
Hallo,

üblicherweise modifiziert man einen Plot mit
Code:
set(lineHandle, 'XData', neuesx)
set(lineHandle, 'YData', neuesy)


Falls das nicht hilft, zeig doch mal den Inhalt deiner Funktion.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gast2351

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2014, 18:46     Titel:
  Antworten mit Zitat      
Code:

function [fh,ah,lh,leg,xlh,ylh,th] = Plot11(handles,x1,y1,x2,y2,x3,y3,x4,y4)
%[fh,ah,lh,leg,xlh,ylh,th] = Plot11(handles,x1,y1,x2,y2,x3,y3,x4,y4)
%Funktion zur Erstellung eines Plots 1x1, d.h. eine Zeile und eine Spalte
%Input: handles,x1,y1,x2,y2,x3,y3,x4,y4
%Output: FigureHandle, AxesHandle, LineHandle, LegendHandle,
%xLabel-Handle, yLabel-Handle, TitleHandle


%% Laden des Grafiklayouts

Grafiklayout;

%% Anzahl der Daten
if (handles.countvar > 1) %Es werden die Simulationsnamen mit in die Legende genommen
n = 2;
else n = '';
end

%% Erstelle Figure

fh(1)=figure; %FigureHandle der 1.Plotfunktion
set(fh(1),myfigure1);

%% Erstelle Achsen 11

ah(1)=axes('Parent',fh(1));

%Grid und sonstiges einstellen:
set(ah(1),'GridLineStyle','-');
grid(ah(1),'on');
box(ah(1),'on');
hold(ah(1),'all');

%% Erstelle Plot in 1
%Plot1
hold on;
if nargin > 2
lh(1)=plot(x1.Werte,y1.Werte,'Parent',ah(1));
set(lh(1),myplot1);
le1{1} = y1.(genvarname(['Leg' num2str(n)])); %erzeugt für n = '' >> y1.Leg oder für n = 2 >> y1.Leg2
end
%Plot2
if nargin > 4
lh(2) = plot(x2.Werte,y2.Werte,'Parent',ah(1));
set(lh(2),myplot2);
le1{2} = y2.(genvarname(['Leg' num2str(n)]));
end
%Plot3
if nargin > 6
lh(3) = plot(x3.Werte,y3.Werte,'Parent',ah(1));
set(lh(3),myplot3);
le1{3} = y3.(genvarname(['Leg' num2str(n)]));
end
%Plot4
if nargin > 8
lh(4) = plot(x4.Werte,y4.Werte,'Parent',ah(1));
set(lh(4),myplot4);
le1{4} = y4.(genvarname(['Leg' num2str(n)]));
end

%% Beschriftung

%Leg
leg(1) = legend(le1);
set(leg(1),mylegend,'Interpreter','none'); %Interpreter ist auf aus, da ansonsten Unterstrich im String die folgende Zahl oder Buchstabe tiefsetzt

% X-Label
xlh(1) = xlabel(ah(1),[x1.Leg, ' [', x1.Einheit, ']']);
set(xlh(1),myaxes);

% Y-Label
if nargin < 4 %Es wird Legendenname mit Einheit angegeben:
ylh(1) = ylabel(ah(1),[y1.Leg, ' [', y1.Einheit, ']']);
else % Es wird nur die Einheit angegeben:
ylh(1) = ylabel(ah(1),['[', y1.Einheit, ']']);
end
set(ylh(1),myaxes);

% Titel
th(1) = title(ah(1),[x1.Leg, ' zu ', y1.Leg]);
set(th(1),mytitle);
 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.01.2014, 20:10     Titel:
  Antworten mit Zitat      
Hallo,

bitte gehe auf den Vorschlag ein.

Was sind/machen myfigure, myaxes etc.?

In deinem Code kommt doch gar nichts vor wie das eingangs erwähnte
Code:
set(fh,{'YDataSource'},{'y1','y2','y3','y4'}')

?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gast2351

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2014, 20:50     Titel:
  Antworten mit Zitat      
Danke für dein Entgegenkommen!

unter myfigure, myaxes hab ich nur das Grafiklayout definiert, z.B. myfigure.Units='centimeters';
myfigure.PaperPosition=[0 0 10 20]
usw.

Das ist alles in einem Skript abgelegt.

----
Ich bin nach Matlabs Beispiel vorgangen, siehe "help refreshdata"

Auszug:
Examples

Plot a sine wave, identify data sources, and then modify its YDataSource:

x = 0:.1:8;
y = sin(x);
h = plot(x,y)
set(h,'YDataSource','y')
set(h,'XDataSource','x')
y = sin(x.^3);
refreshdata

deshalb mein alter Code:
Code:
set(fh,{'YDataSource'},{'y1','y2','y3','y4'}')

-------
 
gast2351

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2014, 21:00     Titel:
  Antworten mit Zitat      
Code:
set(lh, 'XData', 'x')
set(lh, 'YData', 'y')
Error using set
Value must be numeric


Ich verstehe nicht, wie ich dies anzuwenden habe. Im Buch Matlab Kompakt von Wolfgang Schweizer ist folgendes geschrieben:
"Neu treten die Eigenschaften XData,YData und ZData hinzu. Bei allen drei handelt es sich um Koordinaten Vektoren oder Matrizen. Matrizen werden spaltenweise ausgewertet."
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.01.2014, 21:12     Titel:
  Antworten mit Zitat      
Hallo,

ohne die letzten ' ', also z.B.
Code:
set(lh, 'XData', x)
set(lh, 'YData', y)


Du willst ja die tatsächlichen Daten zuweisen, nicht deren Namen.

In dem Beispiel wurde set auf ein Handle zu einer Linie angewendet. Du wendest es aber anscheinend auf ein Handle zu einer Figure an.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gast2351

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2014, 21:51     Titel:
  Antworten mit Zitat      
Code:

>> set(lh, 'XData', x)
set(lh, 'YData', y)
Undefined function or variable 'x'.
 
>> set(lh, 'XData', x1)
set(lh, 'YData', y1)
Error using set
Conversion to double from struct is not possible.

set(lh, 'XData', x1.Werte)
set(lh, 'YData', y1.Werte)
 


(in .Werte sind die Werte in einem Array gespeichert)
Das letzte funktioniert so in etwa. Probleme:
a) es werden nur x1.Werte und y1.Werte aktualisiert
b) x2.Werte und y2.Werte, ... werden mit x1.Werte und y1. Werte gleichgesetzt

Dies hilft auch nicht:
Code:
for i = 1:4
set(lh, 'XData', eval(['x' num2str(i) '.Werte']))
set(lh, 'YData', eval(['y' num2str(i) '.Werte']))
end
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.01.2014, 09:34     Titel:
  Antworten mit Zitat      
Hallo,

wenn, dann müsstest du doch schreiben:

Code:
for i = 1:4
set(lh(i), 'XData', eval(['x' num2str(i) '.Werte']))
set(lh(i), 'YData', eval(['y' num2str(i) '.Werte']))
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.01.2014, 11:30     Titel:
  Antworten mit Zitat      
Hallo gast2351,

Code:
set(lh, 'XData', eval(['x' num2str(i) '.Werte']))

Autsch! Indices in die Namen von Variablen zu schmuggeln und hinterher mit fehleranfälligen EVALs darauf zu zugreifen, ist immer eine schlechte Idee.
Dazu findet man hinreichend viele Themen in diesem Forum.

Viele Grüße, Jan
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.