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

Automatisieren der "group"-Funtkion für einen Box

 

columbia_fiesta
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2012, 14:08     Titel: Automatisieren der "group"-Funtkion für einen Box
  Antworten mit Zitat      
Hallo zusammen,

ich bin schon ziehmlich am Stirnrunzeln und Haareraufen Rolling Eyes ...

Ich möchte einen Boxplot erstellen von verschieden großen Arrays - soweit kein Problem.

Nur möchte ich den group Befehl automatisieren - in eine Schleife einbauen, damit ich je nach Dateienanzahl (hier maxfiles) eine Groupierung auf die Reihe bekomme.

Da ich jetzt noch nicht den riesen Überblick über Matlab habe, löse ich das Problem über manuelle Eingabe, was bei einer größeren Datenmenge sehr aufwendig wird.

Kennt jemand einen starken Befehl oder ein Tipp, wie ich das Problem lösen kann??

vielen Dank und viele Grüße

columbia_fiesta

Anbei der Code


Code:

clear all
close all
clc

option   ='-dpsc2';

%%Daten laden

    load('20120417-KN-PO-1','RDIEnsDate')

    filea{1}    ='20120417-KN-PO-0';
    filea{2}    ='20120417-KN-PO-1';
    filea{3}    ='20120417-KN-PO-2';
    filea{4}    ='20120417-KN-PO-3';
    filea{5}    ='20120417-KN-PO-4';
    filea{6}    ='20120417-KN-PO-5';
    filea{7}    ='20120417-KN-PO-6';
    filea{8}    ='20120417-KN-PO-7';
    %filea{9}    = ;
    %filea{10}    = ;
    %filea{11}    = ;
    %filea{12}    = ;
    %filea{13}    = ;
    %filea{14}    = ;

%an die obeneingegebenen files anpassen => letzter Wert in filea {'...'}
    maxfiles  =8;

%%

for ii=1:maxfiles

    filein = filea{ii};

    ['   FILE readin :: ' filein]



%%
    load(filein, 'SerMagmmpersec');

%negative Extremwerte eliminieren
    SerMagmmpersec(SerMagmmpersec<0)=[];
    SerMagmmpersec = SerMagmmpersec';

% Ausgabe aller Transekten
    v = genvarname('trans', who);
    eval ([v ' = SerMagmmpersec']);



end

%% Der Boxplot

% _Eingabe per Hand_ ==> gute alte Handarbeit !-)
% Die gewünschte Anzahl an Transekten entkommentieren und anpassen

    %Transekten groupieren
    group = [ones(size(trans));ones(size(trans1))+1; ...
     ones(size(trans2))+2;ones(size(trans3))+3;ones(size(trans4))+4; ...
     ones(size(trans5))+5;ones(size(trans6))+6;ones(size(trans7))+7];

%ones(size(trans8))+8;ones(size(trans9))+9;ones(size(trans10))+10;ones(size(trans11))+11; ...
%ones(size(trans12))+12;ones(size(trans13))+13;ones(size(trans14))+14;ones(size(trans15))+15]...;

    %Eingabe der zu darstellenden Transekten
    x = cat(1,trans,trans1,trans2,trans3,trans4,trans5,trans6,trans7);%,trans8,trans9, ...
   trans10,trans11,trans12,trans13,trans14,trans15);

%plotten
    boxplot(x,group)

% Der Titel
    str = 'Messung-';
    measurename = strcat(str,RDIEnsDate);
    title (measurename);

%Achsenbeschriftung
    xlabel('Transekte');
    ylabel('v [mm/s]');
 
%speichern  
    saveas(gcf, 'boxplot_gesamte_Messung.png')
 
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: 22.10.2012, 21:23     Titel: Re: Automatisieren der "group"-Funtkion für einen
  Antworten mit Zitat      
Hallo columbia_fiesta,

Ich verstehe die Frage nicht ganz.
Eigentlich hindert Dich nichts daranm, eine Schleife zu benutzen, wenn Du nur auf das gräßlich EVAL verzichtest und statt dessen ain Cell verwendest, also C{1}, C{2}, ... statt trans1, trans2, ...

Ich habe noch keinen einzigen Code gesehen, der EVAL enthält und nicht an solchen Schwierigkeiten scheitert. Es geht ohne EVAL einfacher, schneller und besser debugbar.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
columbia_fiesta
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2012, 08:26     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für deine Antwort Smile

Der eval Befehl scheint ja nicht ganz so beliebt zu sein... Laughing

Wenn ich nun den Befehl weglasse und ihne wie unten ersetze, dann habe ich alles in meiner zelle C.

nur komme ich nicht dahinter, wie ich diesen group befehl automatisiere.

Kann ich Matlab sagen " zähle auf bis (in meinem Fall) maxfiles"?

Das so etwas passiert:

group = [ones(size(C{1}));ones(size(C{2}))+1;...ones(size(C{n}))+maxfiles -1];


Mein Code bisher (nicht viel verändert)

Code:


clear all
close all
clc

option   ='-dpsc2';

%% Daten laden

    load('20120417-KN-PO-1','RDIEnsDate')

    filea{1}    ='20120417-KN-PO-0';
    filea{2}    ='20120417-KN-PO-1';
    filea{3}    ='20120417-KN-PO-2';
    filea{4}    ='20120417-KN-PO-3';
    filea{5}    ='20120417-KN-PO-4';
    filea{6}    ='20120417-KN-PO-5';
    filea{7}    ='20120417-KN-PO-6';
    filea{8}    ='20120417-KN-PO-7';
    %filea{9}    = ;
    %filea{10}    = ;
    %filea{11}    = ;
    %filea{12}    = ;
    %filea{13}    = ;
    %filea{14}    = ;

% an die obeneingegebenen files anpassen => letzter Wert in filea {'...'}
    maxfiles  =8;

%%

for ii=1:maxfiles

    filein = filea{ii};

    ['   FILE readin :: ' filein]



%%
    load(filein, 'SerMagmmpersec');

% negative Extremwerte eliminieren
    SerMagmmpersec(SerMagmmpersec<0)=[];
    SerMagmmpersec = SerMagmmpersec';

% Ausgabe aller Transekten
   C{ii} = SerMagmmpersec;


end



Vielen Dank und viele Grüße

columbia_fiesta
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: 25.10.2012, 13:54     Titel:
  Antworten mit Zitat      
Hallo columbia_fiesta,

Code:
num = sum(cellfun('size', C, 2));
num = num + sum(0:maxfiles-1);  % Gauss hätte dies effizienter berechnet
group = ones(1, num);

Vielleicht ist es auch "cellfun('size', C, 1)", das musst Du eventuell anpassen.

Gruß, 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.