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

String als Plotargument

 

Escapado
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 05.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2012, 13:06     Titel: String als Plotargument
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein kleine Frage an euch an der ich nun schon eine ganze Weile festhänge.

Ich habe ein Programm in dem ich eine ganze Reihe verschiedener Plots ausgeben möchte.

Was jeweils geplottet wird verändert sich ständig.
Mal ist es:
Code:
plot(0:10,pos_x(1:11,index2+1,index3+11)*1000)
oder
Code:

plot(0:10,div_x(1:11,index2+1,index3+11)*1000)
oder
Code:

plot(0:10,emi_y(index1,1:11,index3+11)*1000)


usw.

Die verschiedenen Kombinationen der Argumente habe ich in einem Cell Array gespeichert, das temp_plot_names heißt.


Ich dachte nun ich könnte nun einfach eine Schleife schreiben und loslegen mit
Code:
plot(temp_plot_names{ii})

wobei ii mein Index der Schleife ist.

Das Problem ist nun aber, dass Matlab meckert, von wegen:
Code:
Error using plot
Invalid first data argument

und ich nehme an, das tut er, weil er meine Einträge im Cell Array als Strings nimmt.
Denn wenn ich einfach mal den Inhalt manuell kopiere funktioniert
Code:

>> plot(0:10,pos_x(1:11,index2+1,index3+11)*1000)
 

aber wenn ich es als String einsetze kommt:
Code:

>> plot('0:10,pos_x(1:11,index2+1,index3+11)*1000')
Error using plot
Invalid first data argument


Jetzt ist die frage, ob es möglich ist Plot dazu zu bringen diesen String zu fressen bzw was ich mit dem String machen muss.

Wäre super cool, wenn mir jemand weiterhelfen könnte - meine Suche war bisher vergebens.
Private Nachricht senden Benutzer-Profile anzeigen


derlowi
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 28.09.12
Wohnort: Ingolstadt
Version: ---
     Beitrag Verfasst am: 05.10.2012, 15:35     Titel:
  Antworten mit Zitat      
Hallo, bin mir nicht ganz sicher, ob ich dich verstanden habe bzw ob ich mich selber gerade verstehe Smile

Ich denke, dein Problem ist deine for schleife mit dem Zähler ii. Du speicherst deine plot Methoden in einem Array, also eine Spalte z.B. oder?



Dass heißt ja ,wenn du wieder darauf zugreifen willst, musst du dein Array auch wieder dementsprechend aufrufen, als Vektor.
Vllt geht es irgendwie so:

(Spalte 1, Zeile 1 bis N)

Code:


for ii=1:N
plot(temp_plot_names(:,ii)) ;

end


 
Private Nachricht senden Benutzer-Profile anzeigen
 
derlowi
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 28.09.12
Wohnort: Ingolstadt
Version: ---
     Beitrag Verfasst am: 05.10.2012, 15:49     Titel:
  Antworten mit Zitat      
Willst du eigentlich alle Methoden Plotten? Oder willst du auswählen welche Methode du hernehmen willst? Ist das Ganze mit Eingabe? Weil dann wäre ja auch ein Switch_code
Code:
switch  plotauswahl
                                  case 1

                                          plot(divx_..)
                                  case 2
                                   
                                          plot(bla_y..)
                         end  


sinnvoll.
Private Nachricht senden Benutzer-Profile anzeigen
 
Escapado
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 05.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2012, 16:31     Titel:
  Antworten mit Zitat      
Okay vielleicht habe ich mich unverständlich ausgedrückt.


Also ursprünglich geht es darum, dass ich in meinem Workspace Variablen habe, das sind 11*11*21 Matrizen. Davon habe ich ein paar mehr. In denen sind Werte gespeichert - ich möchte nun einige Kombinationen davon plotten und die via Matlabfrag speichern. Diese Matritzen heißen so:

Code:
variable_names = {'pos_x','pos_y','div_x','div_y','emi_x','emi_y', 'focus_x','focus_y','bunch_length'};


Ich habe ihre Namen wie man sieht in einem Cell-Array gespeichert, deswegen die geschweiften klammern.

Nun gebe ich am Anfang 3 Werte vor, die die Spalten/Zeilen/Ebenen vorgeben, aus denen aus den Variablen jeweils ausgelesen werden soll (sonst hätte ich am Ende tausende Plots, aber ich möchte gar nicht so viele sondern nur bestimmte):

Code:

index1 = 5;  % x_off in µm
index2 = 5;  % x_rot in µrad
index3 = 5;  % y_rot in µrad


Jetzt gibt es
3*9 Fälle, die ich ausgeben möchte:

Hier mal drei verschiedene:
Code:
plot(0:10,pos_x(1:11, index2+1,index3+11)*1000)
plot(0:10,pos_x(index1+1,1:11,index3+11)*1000)
plot(0:10,pos_x(index1+1,index2+1,1:21)*1000)


Jetzt soll das auch einmal für pos_y, div_x, div_y usw gemacht werden, was jeweils nochmal 9 sind. Also 27 Fälle.

Deswegen habe ich eine Schleife gebaut, die mir Strings erzeugt, die alle Kombinationen beinhalten und dann jeweils das ganze Plotten sollen und dann noch Achsenbeschriftung machen soll und mir eine Textdatei bastelt mit TeX Commands, die ich später in meinen Report einbaue und so weiter und so fort.

Die Schleife erzeugt mir auch die Namen so wie sie soll, das Problem ist, dass dann später dieses Argument:

Code:
0:10,pos_x(1:11, index2+1,index3+11)*1000


und alle anderen Argumente die ich sonst erzeuge leider als Strings vorliegen und an die Funktion "Plot" kann man das in der Form wohl nicht übergeben. Jetzt ist die Frage wie ich Plot dazu bringe das doch zu fressen.

Hier mal der ganze Code fürs nachvollziehen - der Anfang vor der Schleife ist primär für Beschriftungen und so weiter.


Code:


% Massplot Script For The Analysis%

global index1 index2 index3;
index1 = 5;  % x_off in µm
index2 = 5;  % x_rot in µrad
index3 = 5;  % y_rot in µrad

 

%%

% Figure Names and Labels for the different Cases

variable_names = {'pos_x','pos_y','div_x','div_y','emi_x','emi_y', 'focus_x','focus_y','bunch_length'};

title1 = strcat('Solenoid Tolerance Analysis @ 100fC @ ',num2str(index2),'$\mu$rad x-Rotation @ ',num2str(index3),'$\mu$rad y-Rotation');
title2 = strcat('Solenoid Tolerance Analysis @ 100fC @ ',num2str(index1),'$\mu$m x-Offset @ ',num2str(index3),'$\mu$rad y-Rotation');
title3 = strcat('Solenoid Tolerance Analysis @ 100fC @ ',num2str(index1),'$\mu$m x-Offset @ ',num2str(index2),'$\mu$rad x-Rotation');
titles = {title1, title2,title3};

case1 = strcat('_x_off_',num2str(index2),'_',num2str(index3));
case2 = strcat('_x_rot_',num2str(index1),'_',num2str(index3));
case3 = strcat('_y_rot_',num2str(index1),'_',num2str(index2));
index_names = {case1, case2, case3};

xlabel1 = strcat('Solenoid x-Offset in $\mu$m');
xlabel2 = strcat('Solenoid x-Rotation in $\mu$rad');
xlabel3 = strcat('Solenoid y-Rotation in $\mu$rad');
xlabels = {xlabel1,xlabel2,xlabel3};

ylabel1 = strcat('x-Position of the electon bunch mass center in $\mu$m');
ylabel2 = strcat('y-Position of the electon bunch mass center in $\mu$m');
ylabel3 = strcat('x-Divergence of the electon bunch  in $\mu$rad');
ylabel4 = strcat('y-Divergence of the electon bunch  in $\mu$rad');
ylabel5 = strcat('x-Emittance of the electon bunch in pi mrad $\mu$m');
ylabel6 = strcat('y-Emittance of the electon bunch in pi mrad $\mu$m');
ylabel7 = strcat('x-Focus position of the electon bunch in mm');
ylabel8 = strcat('y-Focus position of the electon bunch in mm');
ylabel9 = strcat('Bunch length of the electron bunch in $\mu$m');
ylabels = {ylabel1,ylabel2,ylabel3,ylabel4,ylabel5,ylabel6,ylabel7,ylabel8,ylabel9};

f = figure('visible','off');

% Generating Plot Files and LaTeX Code for Matlabfrag

tex_code = fopen('TeX-Code.txt','w');

for ii =1:3
    for kk=1:9
       file_name =  [variable_names{kk},index_names{ii}];
       
       temp_plot_name1 = ['0:10,',variable_names{kk},'(1:11,index2+1,index3+11)*1000'];
       temp_plot_name2 = ['0:10,',variable_names{kk},'(index1+1,1:11,index3+11)*1000'];
       temp_plot_name3 = ['-10:10,',variable_names{kk},'(index1+1,index2+1,1:21)*1000'];
       temp_plot_names = {temp_plot_name1,temp_plot_name2,temp_plot_name3};
       
       f = figure('visible','off');
       plot(temp_plot_names{ii});
           grid on;
           title(titles{ii});
           xlabel(xlabels{ii});
           ylable(ylabels{kk});
           
           matlabfrag(file_name);
           fprintf(tex_code,['\\psfragfig{D:/Bilder/',file_name,'}\n']);
     
    end
end

fclose(tex_code);
 


Um nochmal darauf hinzuweisen - wenn ich manuell den String ausgeben lasse, ins Clipboard kopiere, plot() schreibe und zwischen den klammern das ganze einfüge, dann geht es so wie es soll.
Private Nachricht senden Benutzer-Profile anzeigen
 
Obasi1904
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 03.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2013, 15:07     Titel:
  Antworten mit Zitat      
Hatte das gleiche Problem und konnte es durch Verwendung der eval-Funktion lösen.

Sollte in deinem Fall etwa so aussehen:
plot(eval(temp_plot_names{ii}))
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.01.2013, 15:25     Titel:
  Antworten mit Zitat      
Hallo,

bei Code, der eval oder ähnliche benötigt, sollte man sich immer fragen, ob das nicht eleganter geht.

Hier würde ich statt der einzelnen Variablen eine Struktur erstellen. Wenn die Daten aus einer .mat-Datei kommen, geht das mit
Code:
ansonsten muss man den vorherigen Code entsprechend anpassen.

Das schöne daran: statt mehreren Variablen hat man eine Struktur. Die beinhalteten Felder kann man mit
Code:
leicht abfragen, und dann mit
Code:
s.(felder(i))
leicht in ein bestimmtes Feld (entspricht dann einer der Variablen) indizieren.

Um Variablen zu sparen, würde ich xlabels und ylabels direkt als Cell Array erstellen.

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