Verfasst am: 21.10.2012, 22:35
Titel: Bestimmte Werte aus Zellen-Matrix Plotten
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
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
sollte es gehen. title darf nur eine "Text" übergeben bekommen, also die beiden strings mit den eckigen Klammern zusammenfassen.
Maik aus Magdeburg
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 24.10.2012, 21:41
Titel:
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: ---
Verfasst am: 31.10.2012, 12:19
Titel:
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
Abhilfe: das figure('visible', 'off') vor der for-Schleife
oder die figure in der for-Schleife schließen mit close(gcf)
Grüße,
Harald
Maik aus Magdeburg
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 01.11.2012, 01:10
Titel:
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.
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
Einstellungen und Berechtigungen
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
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.