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

Plotten von sortierten Daten

 

kannstmasehn
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 12.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2016, 08:01     Titel: Plotten von sortierten Daten
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem:

Ich habe ein Haufen an Daten, insgesamt 110 Messungen. Bei jeder Messung habe ich entsprechende Werte gemittelt und diese dann geplottet. Ich erhalte dann viele Punkte, die ich dann verbinden kann.

Folgendes möchte ich nun plotten:

1) Jeweils 10 Punkte gehören zu einer Messung, sollen also mit einer Kurve verbinden, also Messung 1-10, 11-20, 21-30, etc und diese sollen dann, wie in der Legende gezeigt, markiert werden.

2) Ich möchte den Plotbereich eingrenzen, z.B. bei Q von 0,5 bis 1,5 l/min. Dazu kann ich aber nicht sagen, dass ich nur die ersten und letzten beiden Messwerte weglasse. Mit einer if, if any oder for-Schleife habe ich es nicht hinbekommen. Gibt es da etwas, dass er nur einen bestimmten Teil der Messwerte plottet?

Hier mein Code:

Code:

clear all, clc
files = dir('*.mat') ;
[num,dummy]=size(files);

 
for i=1:num%-22
    filename= lower(files(i).name);
    a=load(filename);
    [xmaxdat,ymaxdat]=size(filename);

    %%%% Zuordnen der Daten
   
    Pressure_auf = a.Channel_2_Data;                            % Druck_vor_Ventil [bar]
    Pressure_ab = a.Channel_3_Data;                             % Druck_nach_Ventil [bar]
    volume_flow = a.Channel_7_Data;                             % Volumenstrom [l/min]


    %%%% Mittelwertbildung

    Pressure(i) = (mean(Pressure_auf-Pressure_ab));         % [N/m^2]
    Vol_strom(i) = (mean(volume_flow));                   % [m^3/s]

    figure(1)
    plot(Vol_strom,Pressure,'o:'),grid on, hold on
    xlabel('Q [l/min]');
    ylabel('\Deltap_{ges} [bar]');  
   
end
legend({'0 kV/mm','500 kV/mm','1000 kV/mm','1500 kV/mm','2000 kV/mm','2500 kV/mm','3000 kV/mm','3500 kV/mm','4000 kV/mm','4500 kV/mm','5000 kV/mm'},'Location','EastOutside');

 


Anbei noch der Plot, wie er bei mir erscheint.


Danke im Voraus!

plot.fig
 Beschreibung:

Download
 Dateiname:  plot.fig
 Dateigröße:  178.52 KB
 Heruntergeladen:  325 mal
Private Nachricht senden Benutzer-Profile anzeigen


kannstmasehn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 12.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2016, 16:25     Titel:
  Antworten mit Zitat      
Habe es halb gelöst. Habe für jede Kurve einen Vektor erstellt:

Code:

clear all, clc
files = dir('*.mat') ;
[num,dummy]=size(files);

 
for i=1:num%-22
    filename= lower(files(i).name);
    a=load(filename);
    [xmaxdat,ymaxdat]=size(filename);

    %%%% Zuordnen der Daten
   
    Pressure_auf = a.Channel_2_Data;                            
    Pressure_ab = a.Channel_3_Data;                            
    volume_flow = a.Channel_7_Data;                            
    voltage_output = a.Channel_8_Data;                          


    %%%% Mittelwertbildung

    Pressure(i) = (mean(Pressure_auf-Pressure_ab));        
    Vol_strom(i) = (mean(volume_flow));                  
    Voltage(i) = mean(voltage_output);                    

    figure(1)
if Voltage(i)<300
    E00x=Vol_strom(i);
    E00y=Pressure(i);
    plot(E00x,E00y,'-o','MarkerEdgeColor','b'),grid on, hold on
end

if Voltage(i)>300 && Voltage(i)<600
   E05x=Vol_strom(i);
   E05y=Pressure(i);
    plot(E05x,E05y,'-o','MarkerEdgeColor','g')
end

if Voltage(i)>800 && Voltage(i)<1100
   E10x=Vol_strom(i);
   E10y=Pressure(i);
    plot(E10x,E10y,'-o','MarkerEdgeColor','r')
end    

if Voltage(i)>1300 && Voltage(i)<1600
   E15x=Vol_strom(i);
   E15y=Pressure(i);
    plot(E15x,E15y,'-o','MarkerEdgeColor','c')
end

if Voltage(i)>1800 && Voltage(i)<2100
   E20x=Vol_strom(i);
   E20y=Pressure(i);
    plot(E20x,E20y,'-o','MarkerEdgeColor','m')
end    

if Voltage(i)>2300 && Voltage(i)<2600
   E25x=Vol_strom(i);
   E25y=Pressure(i);
    plot(E25x,E25y,'-o','MarkerEdgeColor','y')
end
   
if Voltage(i)>2800 && Voltage(i)<3100
   E30x=Vol_strom(i);
   E30y=Pressure(i);
    plot(E30x,E30y,'-o','MarkerEdgeColor','k')
end    

if Voltage(i)>3300 && Voltage(i)<3600
   E35x=Vol_strom(i);
   E35y=Pressure(i);
    plot(E35x,E35y,'-x','MarkerEdgeColor','b')
end

if Voltage(i)>3800 && Voltage(i)<4100
   E40x=Vol_strom(i);
   E40y=Pressure(i);
    plot(E40x,E40y,'-x','MarkerEdgeColor','g')
end    

if Voltage(i)>4300 && Voltage(i)<4600
   E45x=Vol_strom(i);
   E45y=Pressure(i);
    plot(E45x,E45y,'-x','MarkerEdgeColor','r')
end
   
if Voltage(i)>4800 && Voltage(i)<5100
   E50x=Vol_strom(i);
   E50y=Pressure(i);
    plot(E50x,E50y,'x','MarkerEdgeColor','c')
end    
   
end
legend({'0 kV/mm','500 kV/mm','1000 kV/mm','1500 kV/mm','2000 kV/mm','2500 kV/mm','3000 kV/mm','3500 kV/mm','4000 kV/mm','4500 kV/mm','5000 kV/mm'},'Location','EastOutside');


 



Das sind zwar nun sehr viele if-Schleifen und man könnte es bestimmt noch vereinfachen. Die Legende passt nun leider nicht mehr. Wie kann ich

1) Die Legende anpassen?
2) Jedem Graph automatisch eine Farbe und ein Symbol zuweisen, so dass man diese eindeutig unterscheiden kann (also keine Farbe bei dem gleichem Symbol doppelt)?
3) Evtl. die ganzen if-Schleifen verkürzen?


Danke schonmal für die Hilfe. Die Daten kann ich auch noch hochladen, wenn Bedarf ist!

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 19.07.2016, 17:39     Titel:
  Antworten mit Zitat      
das siht alles sehr wüst aus und ist nicht lauffähgi. es ist immer einfacher im forum ein minmalbeispiel zu posten das auch lauffähig ist. für die lösung ist es nicht wichtig das da 100 verschieden grafen sind. beispieldaten die erstmal 2 oder 3 repräsentieren anhand dessen du erklärst was passieren soll ist viel einfacher zu verstehen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
kannstmasehn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 12.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2016, 18:17     Titel:
  Antworten mit Zitat      
Anbei das volle Paket mit Daten und Matlab-Code.

Auswertung.zip
 Beschreibung:

Download
 Dateiname:  Auswertung.zip
 Dateigröße:  228.39 KB
 Heruntergeladen:  300 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
kannstmasehn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 12.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.07.2016, 10:47     Titel:
  Antworten mit Zitat      
Moin,

habe meinen Code nun noch weiter verbessert:

Code:

clear all, clc
files = dir('*.mat') ;
[num,dummy]=size(files);

    %%%% Zähler für Datensätze
    n00=0;
    n05=0;


    %%%% Einlesen und Verarbeiten aller im Ordner befindlichen Dateien
for i=1:num%-22
    filename= lower(files(i).name);
    a=load(filename);
    [xmaxdat,ymaxdat]=size(filename);

   
    %%%% Zuordnen der Daten
   
    Pressure_auf = a.Channel_2_Data;                            
    Pressure_ab = a.Channel_3_Data;                            
    volume_flow = a.Channel_7_Data;                            
    voltage_output = a.Channel_8_Data;                          


    %%%% Mittelwertbildung

    Pressure(i) = (mean(Pressure_auf-Pressure_ab));        
    Vol_strom(i) = (mean(volume_flow));                  
    Voltage(i) = mean(voltage_output);                    

   
    %%%% Sortieren nach Spannungen, Schreiben und Plotten der Vektoren
   
    figure(1)
if Voltage(i)<300
    n00= n00+1;
    E00x(n00) = Vol_strom(i);  
    E00y(n00) = Pressure(i);
end

if Voltage(i)>300 && Voltage(i)<600
    n05= n05+1;
    E05x(n05) = Vol_strom(i);  
    E05y(n05) = Pressure(i);
end    
end
    figure(1)
    plot(E00x,E00y,'o:'),grid on, hold on,
    plot(E05x,E05y,'o:')
    legend({'0 kV/mm','500 kV/mm'});
 


Wie sieht es mit der Möglichkeit aus, die Farben nicht doppelt erscheinen zu lassen?
Besteht eine Möglichkeit die If-Schleifen zu verkürzen?


Danke im Voraus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Biene_gelbschwarz
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.07.2016, 21:55     Titel:
  Antworten mit Zitat      
Hi,

Du könntest den Vektor jeweils in der Schleife umbenennen lassen (mit eval) und die dann plotten (ergibt einzelne Farben)

oder kann man im Nachhinein bei deinem plot nicht mit set die Farben ändern?

lG
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.