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

Legende in for Schleife

 

code88
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 06.02.2008, 10:42     Titel: Legende in for Schleife
  Antworten mit Zitat      
Hallo mit
n=10;
liste=cell(n,1);
x=rand(n,n);
y=rand(n,n);
for i=1:n
liste{i}=['var\_' int2str(i)];
plot ( x(:,i),y(:,i));
hold all
end
legend(liste);
kann man machen, dass die Legende nicht von der Schlaufe überschrieben wird.
Ich habe folgendes Problem:
Ich habe einen Vektor mit den Werten 'Matrix' und ein Array mit den Titeln 'titel'
for i=1:length(Spaltenpositionsvektor)
j=Spaltenpositionsvektor(i)+1;

subplot(2,1,1)
semilogx(Matrix(:,1),Matrix(:,Spaltenpositionsvektor(i,1)))
hold all;

subplot(2,1,2)
semilogx(Matrix(:,1),Matrix(:,j))
hold all;

i=i+1;
In die Legende soll jeweils titel{i} dieser enthält den Titel des i ten Graphen.
Die jeweils erstellte Legende soll nur ergänzt werden. Das Problem sollte ähnlich wie oben mit liste{i}=['var\_' int2str(i)] gelöst werden können nur möchte ich hier eben der Titel aus titel{i} liste{i}=[titel{i}] funktioniert leider nicht!
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 06.02.2008, 11:19     Titel:
  Antworten mit Zitat      
Hallo code88,

Du kannst einfach folgendes unter Deine Schleife setzen (nach end):

Code:
subplot(2,1,1)
legend(titel)
subplot(2,1,2)
legend(titel)


Eine Variable liste brauchst Du nicht, weil ja schon alles in title steht.

Herzliche Grüße
Bijick

PS: Die Zeile i=i+1 kann in der Schleife ersatzlos entfallen.
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
code88
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 06.02.2008, 11:36     Titel:
  Antworten mit Zitat      
Sorry das funktioniert nicht:

figure(1);
for i=1:length(Spaltenpositionsvektor)
j=Spaltenpositionsvektor(i)+1;

subplot(2,1,1)
semilogx(Matrix(:,1),Matrix(:,Spaltenpositionsvektor(i,1)))
hold all;

subplot(2,1,2)
semilogx(Matrix(:,1),Matrix(:,j))
hold all;
i=i+1;

end

subplot(2,1,1)
legend(titel);
title('Uebertrangungsfunktion');
xlabel('Frequenz Hz');
ylabel('Amplitude dB');
grid on;

subplot(2,1,2)
legend(titel);
xlabel('Frequenz Hz');
ylabel('Phase °');
grid on;

hold off;




??? Error using ==> legend>process_inputs at 560
Cell array argument must be a cell array of strings.

Error in ==> legend>make_legend at 330
[orient,location,position,children,listen,strings,propargs] = process_inputs(ha,argin);

Error in ==> legend at 288
[h,msg] = make_legend(ha,varargin(arg:end));

Error in ==> Daten_darstellen at 47
legend(titel);


und titel sieht so aus:

titel =

[] [1x36 char] [1x36 char] [1x34 char] [1x34 char] [1x34 char] [1x34 char]
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 06.02.2008, 12:24     Titel:
  Antworten mit Zitat      
Moin,
anscheinend kommt Matlab mit deiner Variablen titel nicht klar.
Was kommt denn als Ausgabe, wenn du
Code:
eingibst? Damit lässt sich immer ganz gut überprüfen, wo in solchen Fällen der Fehler liegt.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
code88
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 06.02.2008, 12:30     Titel:
  Antworten mit Zitat      
whos test
>> whos titel
Name Size Bytes Class Attributes

titel 1x3 1344 cell
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 06.02.2008, 12:55     Titel:
  Antworten mit Zitat      
Bei mir funktioniert folgendes Beispiel einwandfrei:
Code:
titel = {'test1','test2','test3'};
A = rand(1,10);
B = rand(3,10);
figure,
plot(A,B),
legend(titel);

Ich vermute mal, dass deine Einträge in "titel" keine Strings sind - dann macht nämlich auch die Fehlermeldung sinn, dass Matlab für die Legende ein cell-array mit strings haben will.
Das müsstest du nochmal überprüfen.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
code88
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 06.02.2008, 13:41     Titel:
  Antworten mit Zitat      
Der Weg zu titel ist der folgende:
Ich initialisiere

titel=[];

lese ein file ein

filenames = uigetfile('*.txt', 'Dateien zum Auswerten auswählen','Multiselect','on');

und in einer if Schlaufe

titel{k}=filenames;

lege ich den jeweiligen Wert von filenames in die k'te zeile von titel
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 06.02.2008, 13:49     Titel:
  Antworten mit Zitat      
Ach so machst du das...
In der Hilfe zu uigetfile(...,'multiselect','on') steht aber, dass filenames breits ein cell-array mit strings ist. Du brauchst es also nicht mehr umschreiben in titel, sondern kannst es gleich für die Legende verwenden.

Btw: Mit titel=[] initialisierst du eine Matrix, aber kein Cell-Array - glaube ich Question
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
code88
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 06.02.2008, 13:51     Titel:
  Antworten mit Zitat      
ah ich speichere ihn als

savefile = 'titel.mat';
save(savefile, 'titel')

ab und lese ihn dann mit

load titel in einem anderen Programm wieder ein.

Das könnte der fehler sein.

Wie speichere ich titel als ein cell array of strings?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 06.02.2008, 13:52     Titel:
  Antworten mit Zitat      
Probier einfach mal:
Code:
savefile = 'titel.mat';
save(savefile, 'filenames')


Das sollte klappen...
Allerdings heißt die Variable dann weiterhin filenames...

\e: Bzw. brauchst du die Variable "filenames" noch irgendwo anders in deinem Programm? Sonst kannst du auch statt
Code:
Code:
schreiben Wink
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?

Zuletzt bearbeitet von steve am 06.02.2008, 13:57, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
code88
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 06.02.2008, 13:56     Titel:
  Antworten mit Zitat      
nein ist es nicht habe beide Programme zusammen gefügt:

%

clear all;
frequenz=load('Frequenz.txt');
n=793;
%m=449;
m=1000;
Matrix=zeros(n,m);
Matrix(:,1)=frequenz;
titel={};

filenames = uigetfile('*.txt', 'Dateien zum Auswerten auswählen','Multiselect','on');
for k=1:size(filenames,2)
fid=fopen(filenames{k},'r');

if fid == -1
warning('Datei nicht gefunden') ;
end;

vec = textscan(fid,'%s',5,'delimiter','\n'); %zuerst 5 Zeilen Text
i=0;
vec = textscan(fid,'%n',3);% auf der 6 Zeile 3 numerische Werte einlesen
while length(vec{1}) ~= 0 %solange die Länge des Vektors vec nicht null ist also noch nicht am Ende des Textfiles
i=i+1;
ErgebnisVektor(i,Smile = [vec{1}(2) vec{1}(3)]; % in ErgebnisVektor auf i'ten Zeile den zweiten und dritten Wert des eingelesenen Vektors vec schreiben
vec = textscan(fid,'%n',3); %auf nächster Zeile die 3 numerischen Werte einlesen
end
fclose(fid);
ErgebnisCell{k} = ErgebnisVektor;
titel{k}=filenames;
%titel{k+1}=filenames;
Matrix(:,2*k)=ErgebnisVektor(:,1);
Matrix(:,2*k+1)=ErgebnisVektor(:,2);
end


figure(1);
for i=1:length(titel)

subplot(2,1,1)
semilogx(Matrix(:,1),Matrix(:,2*i))
hold all;

subplot(2,1,2)
semilogx(Matrix(:,1),Matrix(:,2*i+1))
hold all;
i=i+1;
end

subplot(2,1,1)
legend(titel);
title('Uebertrangungsfunktion');
xlabel('Frequenz Hz');
ylabel('Amplitude dB');
grid on;

subplot(2,1,2)
legend(titel);
xlabel('Frequenz Hz');
ylabel('Phase °');
grid on;

hold off;

und gibt immer noch eine Fehlermeldung von

??? Error using ==> legend>process_inputs at 560
Cell array argument must be a cell array of strings.

Error in ==> legend>make_legend at 330
[orient,location,position,children,listen,strings,propargs] = process_inputs(ha,argin);

Error in ==> legend at 288
[h,msg] = make_legend(ha,varargin(arg:end));

Error in ==> meh_files_glz at 51
legend(titel);
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 06.02.2008, 14:05     Titel:
  Antworten mit Zitat      
Der Teufel steckt immer im Detail Wink :
Code:
titel{k}=filenames;
muss heißen:
Code:
titel{k}=filenames{k};

Sonst schreibst du dir den kompletten Inhalt von filenames in jedes Element von titel...

Probier mal ob es klappt Wink
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
code88
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 91
Anmeldedatum: 06.02.08
Wohnort: Meinisberg
Version: MATLAB Version 7.8.0.347 (R2009a)
     Beitrag Verfasst am: 06.02.2008, 14:10     Titel:
  Antworten mit Zitat      
so ich habs habe titel einfach mit filenames ersetzt brauche da gar keinen array mit strings dieser existiert schon mit filenames

Code:
%

clear all;
frequenz=load('Frequenz.txt');
n=793;
%m=449;
m=1000;
Matrix=zeros(n,m);
Matrix(:,1)=frequenz;


filenames = uigetfile('*.txt', 'Dateien zum Auswerten auswählen','Multiselect','on');
for k=1:size(filenames,2)
    fid=fopen(filenames{k},'r');
   
   if fid == -1
        warning('Datei nicht gefunden') ;
    end;
   
    vec = textscan(fid,'%s',5,'delimiter','\n'); %zuerst 5 Zeilen Text
    i=0;
    vec = textscan(fid,'%n',3);% auf der 6 Zeile 3 numerische Werte einlesen
    while length(vec{1}) ~= 0 %solange die Länge des Vektors vec nicht null ist also noch nicht am Ende des Textfiles
        i=i+1;
        ErgebnisVektor(i,:) = [vec{1}(2) vec{1}(3)]; % in ErgebnisVektor auf i'ten Zeile den zweiten und dritten Wert des eingelesenen Vektors vec schreiben
        vec = textscan(fid,'%n',3); %auf nächster Zeile die 3 numerischen Werte einlesen
    end
    fclose(fid);
    ErgebnisCell{k} = ErgebnisVektor;
    Matrix(:,2*k)=ErgebnisVektor(:,1);
    Matrix(:,2*k+1)=ErgebnisVektor(:,2);
end


figure(1);
for i=1:length(filenames)        
               
        subplot(2,1,1)        
        semilogx(Matrix(:,1),Matrix(:,2*i))
        hold all;
       
        subplot(2,1,2)    
        semilogx(Matrix(:,1),Matrix(:,2*i+1))
        hold all;
        i=i+1;        
end

subplot(2,1,1)
legend(filenames);
title('Uebertrangungsfunktion');
xlabel('Frequenz Hz');
ylabel('Amplitude dB');
grid on;

subplot(2,1,2)
legend(filenames);
xlabel('Frequenz Hz');
ylabel('Phase °');
grid on;

hold off;
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 06.02.2008, 14:12     Titel:
  Antworten mit Zitat      
Hab ich doch gesagt Wink

Aber schön das es jetzt funktioniert Smile
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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.