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 im 3D-Plot individuell anpassen

 

Sirdar
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.04.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2021, 15:13     Titel: Legende im 3D-Plot individuell anpassen
  Antworten mit Zitat      
Hallo liebes Forum,

ich habe einige Koordinaten im Dreidimensionalen, die ich mir in einem 3d-Plot anzeigen lasse. Zusätzlich lasse ich mir Verbindungslinien zwischen den Koordinaten drucken. Ein Teil der Verbindungslinien wird über eine for-Schleife eingezeichnet, die zur Unterscheidung eine andere Linienart und -farbe verwenden. Der vereinfachte Code mit den relevanten Zeilen lautet:

Code:
figure(1)                       %erstellen eines Diagramms
plot3(A(:,1), A(:2), A(:,3), 'g*', 'LineWidth', 2, 'DisplayName', 'A');
                                %Drucken der 3D-Positionen von A
hold on;                        %überschreiben des vorherigen Plots wird
                                %ausgeschaltet                          
plot3(B(:,1), B(:,2), B(:,3), 'b*', 'LineWidth', 3, 'DisplayName', 'B');
                                %Drucken der 3D-Positionen Con B                              
plot3(C(:,1), C(:,2), C(:,3), 'r*', 'LineWidth', 3, 'DisplayName', 'C');
                                %Drucken der 3D-Positionen von C                                
plot3([B(:,1) C(:,1)]', [B(:,2) C(:,2)]', [B(:,3) C(:,3)]',  'LineStyle', '-', 'Color', 'black', 'LineWidth', 1, 'DisplayName', 'Verbindung B-C');
                                %Drucken von Verbindungslinien

for
    for
        l1 = line([A(a,1) B(b,1)] , [A(a,2) B(b,2)], [A(a,3) B(b,3)], 'LineStyle', '--', 'Color', 'green', 'LineWidth', 1, 'DisplayName', 'Verbindung A-B-C');
                                %Linien zeichnen        
    end
end

for
    for
         l2 = line([A(a,1) C(c,1)] , [A(a,2) C(c,2)], [A(a,3) C(c,3)], 'LineStyle', '--', 'Color', 'green', 'LineWidth', 1, 'DisplayName', 'Verbindung A-B-C');
                %Linien zeichnen
    end
end
 


Jetzt lasse ich mir über die folgende Codezeile eine Legende dazu drucken:
Code:
h = legend('PosA', 'PosB', 'PosC','Verbindung B - C', 'Verbindung A - B - C');
                                    %schreiben einer Legende
 

Das Aussehen der Legende habe ich im Bild "Legende1" angefügt.

Jetzt habe ich das Problem, dass die Linienfarbe und -art für die Verbindungslinien gleich angezeigt werden (schwarz). Ich möchte aber für den Eintrag: "Verbindung A - B - C" die von mir im Code angegeben grün-gestrichelte Linienart anzeigen lassen.

Eine alternative Schreibweise für zur Darstellung der unterschiedlichen Linienfarben und -arten habe ich hier im Forum gefunden. Über die Erweiterungen (..., 'DisplayName', 'Verbindung A - B -C ') im Code für den 3D-Plot und dem Befehl:
Code:

zeigt es mir alle geplottet Verbindungslinien in der gewünschten Art an. Leider schreibt es mir in die Legende alle Verbindungslinien hinein (siehe Bild "Legende2"), obwohl ich an der Stelle nur jeweils einen Legendeintrag benötige.

Gibt es eine Möglichkeit, einen der beiden Codevarianten so zu gestalten, dass es mir für die zwei Linienarten jeweils nur einen Eintrag mit den entsprechenden Linienfarben und -aussehen erzeugt?

Im Forum bin ich leider nur auf Abwandlungen meines Codes gestoßen, der jeweils nur die eine oder andere Variante meiner vorhanden Versionen ausgibt.

Legende2.png
 Beschreibung:

Download
 Dateiname:  Legende2.png
 Dateigröße:  94.77 KB
 Heruntergeladen:  241 mal
Legende1.png
 Beschreibung:

Download
 Dateiname:  Legende1.png
 Dateigröße:  9.06 KB
 Heruntergeladen:  223 mal
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.06.2021, 19:05     Titel:
  Antworten mit Zitat      
Hallo,

wenn du nur für ausgewählte Linien eine Legende haben willst, musst du angeben für welche. Wenn ich den Wunsch richtig verstehe:

Code:
h = legend([p1, p2, p3, l1, l2], 'PosA', 'PosB', 'PosC','Verbindung B - C', 'Verbindung A - B - C');

wobei p1 - p3 die Rückgabeargumente der ersten drei Plots sind:
p1 = plot3(A(:,1), A(:2), A(:,3), ...
etc.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirdar
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.04.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2021, 09:36     Titel:
  Antworten mit Zitat      
Danke Harald.

Durch die Schleifen und das wiederholende Einlesen von Strecken zwischen de Punkten habe ich die Linien durch einen 3D Plot geändert, l1 -> P5 und l2 -> p6. Ich habe danach bei p5 und p6 noch ein "end" in Klammern hinzugefügt. Somit zeigt es mir die gewünschten Linienfarben für die letzte Strecke an und meine Legende sieht so aus wie gewünscht.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.