So färben Sie Streupunkte und erstellen Legendeneinträge basierend auf einer Datentypspalte

So färben Sie Streupunkte und erstellen Legendeneinträge basierend auf einer Datentypspalte

Angenommen, ich habe eine Datei wie diese:

\documentclass{standalone}
\usepackage{pgfplots,filecontents}
\begin{filecontents*}{data}
1 10 type1
2 25 type2
3 75 type2
4 100 type3
5 150 type3
\end{filecontents*}

\begin{document}  

\begin{tikzpicture}
    \begin{axis}   
    \addplot[scatter,only marks] 
        table[row sep=crcr] {data};         
    \end{axis}
\end{tikzpicture}

\end{document}

wodurch dieses Diagramm erstellt wird (wobei zu beachten ist, dass der Code mit der Einführung der dritten Datenspalte alles über Bord wirft und das Diagramm der Koordinaten (1,10) und (2,25) durcheinanderbringt):

Bildbeschreibung hier eingeben

Wie mache ich:

  1. Färben Sie jeden Streupunkt ein oder weisen Sie jedem ein zufälliges Symbol zu, basierend auf seiner Spalte „Typ“. Mir ist klar, dass für Letzteres wahrscheinlich eine Anweisung vom Typ „if type=type1, symbol=triangle“ erforderlich ist, was in Ordnung ist.
  2. Erstellen Sie eine Legende, um anzuzeigen, welche Farbe zu welchem ​​Datentyp gehört

Ich kann dies manuell mit separaten \addplotBefehlen für jeden Datentyp, gefolgt von , tun \addlegendentry{type1}, aber es muss doch eine einfache Möglichkeit geben, dies mit einem einzigen zu automatisieren addplot?

Antwort1

Im PGFPLOTS-Handbuch gibt es ein Beispiel, das genau das tut, was Sie wollen. Derzeit ist es auf Seite 107, oder4.5.11 Streudiagramme.

\documentclass[border=9,tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[legend pos=south east]
    \addplot[
        scatter,only marks,scatter src=explicit symbolic,
        scatter/classes={
            a={mark=square*,blue},
            b={mark=triangle*,red},
            c={mark=o,draw=black,fill=black}
        }
    ]
    table[x=x,y=y,meta=label]{
        x    y    label
        0.1  0.15 a
        0.45 0.27 c
        0.02 0.17 a
        0.06 0.1  a
        0.9  0.5  b
        0.5  0.3  c
        0.85 0.52 b
        0.12 0.05 a
        0.73 0.45 b
        0.53 0.25 c
        0.76 0.5  b
        0.55 0.32 c
    };
    \legend{Class 1,Class 2,Class 3}
\end{axis}
\end{tikzpicture}
\end{document}

verwandte Informationen