![So färben Sie Streupunkte und erstellen Legendeneinträge basierend auf einer Datentypspalte](https://rvso.com/image/298793/So%20f%C3%A4rben%20Sie%20Streupunkte%20und%20erstellen%20Legendeneintr%C3%A4ge%20basierend%20auf%20einer%20Datentypspalte.png)
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):
Wie mache ich:
- 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.
- Erstellen Sie eine Legende, um anzuzeigen, welche Farbe zu welchem Datentyp gehört
Ich kann dies manuell mit separaten \addplot
Befehlen 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}