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

Bestimmte Werte aus Zellen-Matrix Plotten

 

Maik aus Magdeburg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2012, 22:35     Titel: Bestimmte Werte aus Zellen-Matrix Plotten
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem. Ich habe eine Cell-Array das aus bis zu 50 Zellen besteht.
In den Zellen stehen Matrizzen mit 4 Spalten und unterschiedlich vielen Zeilen. Die ersten drei Spalten sind x , y und z. Die vierte Spalte ist ein Farbwert. In den Matrizzen stehen ausschließlich Zahlen von 0 bis 400.
Ich möchte jetzt immer nur eine Ebene plotten z.B.: z = 10. Ich möchte jetzt also von allen Zellen die Zeilen plotten wo in der dritten Spalte ein bestimmter Wert steht. In diesem Bsp. z = 10. Z soll aber für alle Werte Durchlaufen werden so das ich später ein Bild für jede Ebene habe. Leider habe ich noch nicht herausfinden können wie ich in einer Schleife einen Zeilenwert in einer Zelle überprüfen bzw. aufrufen kann. Hoffe ihr könnt mir helfen.

Mit freundlichen Grüßen
Maik

Codebeispiel das leider nicht funktioniert, jedoch bin ich mir sicher das es so oder so ähnlich aussehen müsste

Code:

farbe=hsv(20);
i=0;
for i= Loesungsort{:}(:,3)   % i soll der Wert in der dritten Spalte sein nach dem geguckt wird
    for wert = 1:20
        figure; hold on
        plot3(Loesungsort{wert}(:,1),Loesungsort{wert}(:,2),Loesungsort{wert}(:,3),'.','color',farbe(wert,:)); % plotten der Datenreihen
    end
    i=i+5;
end


Maik aus Magdeburg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 15:10     Titel:
  Antworten mit Zitat      
Hallo,

ich habe das oben geschilderte Problem mit nachfolgendem Code gelöst. Der reine Plot funktioniert also. Leider treten bei der Erweiterung des Codes jetzt andere Probleme auf, und zwar beim betiteln des Plotts und beim speichern.
Ich möchte jeden Plott fortlaufend einen Namen entsprechend seines Z-Wertes geben. Beim betiteln gibt er folgende Fehlermeldung aus:
??? Error using ==> title at 29
Incorrect number of input arguments
Error in ==> title at 23
h = title(gca,varargin{:});

Und das obwohl ich es genau so mache wie in der Hilfe oder hier im Forum beschrieben.
Bei der Bezeichnung der zu speichernden Bilder nimmt er diese Lauf-Variable komischerweise anstandslos an. Leider sind die Bilder die er speichert bis auf ein eingezeichnetes Koordinatensystem leer. Was kann ich da tun?


Mit freundlichen Grüßen
Maik
Code:
   for It=0:5:100
        zeilen=find(Loesungs(:,3)==It); %identifiziere alle Zeilen die in der 3. Spalte "It" stehen haben
        Loesungsort=Loesungs(zeilen,:);
        for t=1:Ind
            zeile=find(Loesungsort(:,4)==t); %identifiziere alle Zeilen die in der 4. Spalte "Ind" stehen haben
            Loesungszelle{t}=Loesungsort(zeile,:);
        end
        figure
        It;
        hold on; grid on; view(3);
        xlabel('Drehung X'); ylabel('Drehung Y'); zlabel('Drehung Z');
        title('Z-Ebene',num2str(It));  %Titel des Plots
        set(gca,'XTick',0:90:360);
        set(gca,'YTick',0:90:360);
        set(gca,'ZTick',0:90:360);
        hf = figure('visible','off'); % unterdrueck Anzeige der figure
        for h = 1:Ind
            plot3(Loesungszelle{h}(:,1),Loesungszelle{h}(:,2),Loesungszelle{h}(:,3),'.','color',farbe(h,:)); % plotten der Datenreihen
            print(hf,'-djpeg','-noui', ['Z-Ebene' num2str(It)]); % speichen der Bilder im aktuellen Verzeichnis mit dem Namen "Z-Ebene0" und "Z-Ebene5"...
        end
     end
 
tschun
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 73
Anmeldedatum: 05.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 15:30     Titel:
  Antworten mit Zitat      
Hi,

Mit
Code:

 title(['Z-Ebene' num2str(It)]);
 

sollte es gehen. title darf nur eine "Text" übergeben bekommen, also die beiden strings mit den eckigen Klammern zusammenfassen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Maik aus Magdeburg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 21:41     Titel:
  Antworten mit Zitat      
Ok hat super funktioniert.

Das wars vielen Dank. Das zweite habe ich auch hinbekommen. Musste nur diese hf Variable rausnehmen und davor schreiben.
 
Maik aus Magdeburg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2012, 12:19     Titel:
  Antworten mit Zitat      
Hallo,

ich habe doch noch ein Problem mit nachfolgendem Code der ähnlich dem von oben ist. Und zwar erstelle ich Bilder (insgesamt 219 Stück) mit den gefundenen Lösungen erst für die X-Ebene, dann für die Y-Ebene und dann auch noch für die Z-Ebene. der nachfolgende Code ist nur für die X-Ebenen. Der Code für die anderen Ebenen ist ähnlich.
Das Problem bei dem Code ist das er manchmal an unterschiedlichen Stellen folgende Fehlermeldung ausgibt die immer gleich ist:
Warning: See help sprintf for valid escape sequences.
> In graphics\private\name at 94
In print at 206
??? Error using ==> name at 94
Error using ==> name at 94
Cannot create output file '.
Error in ==> print at 206
pj = name( pj );

Das komische an der Sache ist, das er manchmal alle Bilder ohne diese Meldung erstellt, manchmal macht er die ersten 100 Bilder, dann kommt die Meldung und nach nochmaliger Codeeingabe erstellt er die restlichen Bilder. Manchmal stockt der Befehl auch 3-4 mal während der Bilderstellung. Immer an unterschiedlichen Stellen auch bei den gleichen Daten.
Ich komme einfach nicht dahinter warum das so ist.
Eine weitere Frage wäre wie man die Bilder während der Erstallung wieder aus dem RAM herausbekommt. Bei der Erstellung steigt der RAM-verbrauch (von Bild zu Bild verbraucht er mehr) von Matlab soweit an das mein Laptop nämlich an seine Grenzen kommt. Dadurch kann ich immer nur eine Session nach einander erstellen und nicht mehrere parallel. Wäre super wenn da jemand einen Tip hätte.

Mit freundlichen Grüßen

Maik aus Magdeburg


Code:
% Plottbefehl Für Ebenenweises Plotten
    % Für den X wert_______________________________________________________
     for It=0:5:360
        zeilen=find(Loesungs(:,1)==It); %identifiziere alle Zeilen die in der 1. Spalte "It" stehen haben
        Loesungsort=Loesungs(zeilen,:);
        for t=1:Ind
            zeile=find(Loesungsort(:,4)==t); %identifiziere alle Zeilen die in der 4. Spalte "Ind" stehen haben
            Loesungszelle{t}=Loesungsort(zeile,:);
        end
        figure('visible','off'); % unterdrueck Anzeige der figure
        hold on; grid on;
        colorbar('YTickLabel',{'0','5','10','15','20','25','30'});
        colormap(hsv);
        xlabel('Drehung Y'); ylabel('Drehung Z');
        title(['X-Ebene ',num2str(It)]);
        set(gca,'XTick',0:90:360);
        set(gca,'YTick',0:90:360);
        set(gca,'ZTick',0:90:360);
        for h = 1:Ind
            plot(Loesungszelle{h}(:,2),Loesungszelle{h}(:,3),'.','color',farbe(h,:)); % plotten der Datenreihen
            print('-djpeg','-noui', ['X-Ebene' num2str(It)]); % speichen der Bilder im aktuellen Verzeichnis
        end
     end
 
Harald
Forum-Meister

Forum-Meister


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

bitte die komplette Fehlermeldung posten, inkl. der Zeile deines Codes, die die Fehlermeldung erzeugt.

Was das Speicherproblem angeht: du erzeugst in jeder Iteration eine neue Figure, die alten bleiben erhalten.
Code:
f1 = figure('visible', 'off');
f2 = figure('visible', 'off');
f1
f2


Abhilfe: das figure('visible', 'off') vor der for-Schleife
oder die figure in der for-Schleife schließen mit close(gcf)

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Maik aus Magdeburg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2012, 01:10     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für den Tipp, doch wo soll ich das "close(gcf)" einfügen? Etwa zwischen dem letzten und dem vorletzten END meines Codes?

Die komplette Fehlermeldung lautet:

Warning: See help sprintf for valid escape sequences.
> In graphics\private\name at 94
In print at 206
??? Error using ==> name at 94
Error using ==> name at 94
Cannot create output file '.
Error in ==> print at 206
pj = name( pj );

Wenn ich die Fehlermeldung dann anklicke komme ich immer auf Zeile 94 bzw. 206 in den m-code für den Printbefehl der von Matlab ja mitgeliefert wird.
Ich Kopiere den Code immer ins Command-window von Matlab, da das Programm bei einem Abbruch sonst immer wieder von vorn anfangen würde statt da weiter zu machen wo es aufgehört hat. Das würde ewig dauern er dann mal ne komplette Session erstellt hat. Dauert ja so schon mehr als ne Stunde.

Mit freundlichen Grüßen

Maik aus Magdeburg
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.11.2012, 11:23     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Etwa zwischen dem letzten und dem vorletzten END meines Codes?

So würde ich's versuchen, ja.

Nicht reproduzierbare Probleme sind immer schwierig. Bei mir ist Zeile 94 von name.m eine Kommentarzeile. Welche MATLAB-Version verwendest du?

Was ich machen würde: den Code als Skript speichern und vor dem Ausführen
Code:

eingeben.

Dann wird vielleicht ersichtlich, wie es zu dem Problem kommt. Wenn das nicht hilft, bitte lauffähigen Beispielcode, bei dem das Problem auftritt, posten, einschließlich eines Beispieldatensatzes.

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.