Seite 1 von 1

Legende rechts neben Konfusionsmatrix (Tikz) einfügen

Verfasst: Do 2. Jun 2022, 11:10
von lina_24642
Liebes Forum,

ich möchte eine Konfusionsmatrix abbilden mit Hilfe von Tikz und den Platz rechts daneben für eine Legende nutzen die TP, FP,... erklärt. Die Konfusionsmatrix habe ich schon gebaut, allerdings weiß ich nicht wie ich nun als schöne Legende Text rechts daneben setzen kann. Wäre super, wenn ihr mir weiterhelfen könnt!

Das soll in die Legende:
True Positive (TP) - Modell sagt die positive Klasse richtig vorher
True Negative (TN) - Modell sagt die negative Klasse richtig vorher
False Positive (FP) - Modell sagt die positive Klasse falsch vorher
False Negative (FN) - Modell sagt die negative Klasse falsch vorher
Und das ist die Konfusionsmatrix:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}

\begin{tikzpicture}[
box/.style={draw,rectangle,minimum size=2cm,text width=1.5cm,align=center,every label/.style={text depth=\depthof{p}}}]
\matrix (conmat) [row sep=.1cm,column sep=.1cm] {
\node (tpos) [box,
    label=left:\( \mathbf{p'} \),
    label=above:\( \mathbf{p} \),
    ] {TP};
&
\node (fneg) [box,
    label=above:\textbf{n}] {FN};
\\
\node (fpos) [box,
    label=left:\( \mathbf{n'} \)] {FP};
&
\node (tneg) [box] {TN};
\\
};
\node [left=.05cm of conmat,text width=2.5cm,align=center] {\textbf{Tatsächliche \\ Klasse}};
\node [above=.05cm of conmat] {\textbf{Ermittelte Klasse}};
\end{tikzpicture}

\end{document}

Re: Legende rechts neben Konfusionsmatrix (Tikz) einfügen

Verfasst: Fr 3. Jun 2022, 07:30
von Bartman
Du kannst die Legende mithilfe einer tabular-Umgebung in einen Knoten setzen und diesen an der Matrix ausrichten oder eine weitere Matrix anlegen und sie auf der rechten Seite der vorhandenen Matrix platzieren.

Mein Vorschlag zeigt, wie die zweite Variante aussehen könnte:
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{babel}
\usepackage{tikz}
\usepackage{showframe}

% Die TikZ-Bibliothek babel muss geladen werden, damit der LaTeX-Lauf 
% nicht wegen der Anführungsstriche im Argument der Funktion depth 
% mit einer Fehlermeldung beendet wird.
\usetikzlibrary{matrix,fit,babel}

\begin{document}
\begin{center}
\begin{tikzpicture}[
  font=\scriptsize,
  box/.style={
    draw,
    minimum size=1.5cm
  },
  every label/.style={text depth=depth("p")}
]
\matrix [
  matrix of nodes,
  row sep=1mm,
  column sep=1mm
] (conmat) {
  |(tpos) [
    box,
    label={[name=p']left:\(\mathbf{p'}\)},
    label={[name=p]above:\(\mathbf{p}\)}
  ]| TP%
&
  |(fneg) [box, label=above:\(\mathbf{n}\)]| FN%
\\
  |(fpos) [box, label=left:\(\mathbf{n'}\)]| FP%
&
  |(tneg) [box]| TN%
\\
};

\node [fit=(tpos) (tneg), inner sep=0pt] (conmat without labels) {};
\path [font=\bfseries\scriptsize]
  (conmat without labels.west-|p'.west) 
    node [left, align=center] {Tatsächliche\\Klasse}
  (conmat without labels.north|-p.north) 
    node [above] {Ermittelte Klasse}
;

\matrix[
  matrix of nodes,
  nodes={anchor=base west},
  execute at empty cell={\node{--};},
  column 3/.style={text width=3cm},
  right=1mm
] at (conmat without labels.east) {
  True Positive (TP)  && Modell sagt die positive Klasse richtig vorher\\
  True Negative (TN)  && Modell sagt die negative Klasse richtig vorher\\
  False Positive (FP) && Modell sagt die positive Klasse falsch vorher\\
  False Negative (FN) && Modell sagt die negative Klasse falsch vorher\\
};
\end{tikzpicture}
\end{center}
\end{document}

Re: Legende rechts neben Konfusionsmatrix (Tikz) einfügen

Verfasst: Fr 3. Jun 2022, 11:32
von Crosspostverlinker
Es ist sowohl unfair den Helfern, als auch anderen Hilfesuchenden mit ähnlichem Problem gegenüber, ein Crosspost nicht zu verlinken. Deshalb sehen die Regeln praktisch aller Foren eine solche Verlinkung ausdrücklich vor. Bitte ergänze solche Links in allen Foren!

Re: Legende rechts neben Konfusionsmatrix (Tikz) einfügen

Verfasst: So 5. Jun 2022, 00:29
von Stefan Kottwitz
Hi Lina,

warum das übrigens Usus ist, Crossposts zu verlinken: z.B. weiß man auf mrunix.de nicht, dass es hier schon eine Lösung gibt, und vllt. fängt dann einer von Null an, eine Lösung wieder zu erarbeiten und zu posten. Links hier und da helfen.

Schöne Pfingsten!

Stefan

Re: Legende rechts neben Konfusionsmatrix (Tikz) einfügen

Verfasst: So 5. Jun 2022, 08:40
von ich meine ja nur
Ausführlich wird das Thema Crossposts in viewtopic.php?f=2&t=4913 behandelt.

@Stefan Wie bereits oben erwähnt, geht es nicht nur um die Helfer, sondern auch andere Hilfesuchende. Wenn jemand mit einem vergleichbaren Problem auf mrunix darauf stößt, die Lösung aber nur auf goLaTeX zu finden ist, würde ihm der Link – möglichst direkt im Fragebeitrag auf mrunix – sehr helfen, diese Lösung zu finden. Ohne einen solchen Link, findet der neue Hilfesuchende diese eventuell nicht, sondern erfährt nur, dass irgendwann schon einmal jemand eine ähnliche Frage hatte. Und ja, das kann dann auch wieder Helfer unnötig in Anspruch nehmen, wenn nämlich der neue Hilfesuchende dann einen Ich-habe-dasselbe-Problem-Kommentar anhängt. Während derzeit Helfer nämlich eventuell das Crosspost noch leicht finden, wird das in ein paar Monaten schon wesentlich schwieriger.

Oder wie es das Regelwerk ganz kurz sagt: Ziel ist: "man kann auf allen Seiten die Diskussion verfolgen".

Re: Legende rechts neben Konfusionsmatrix (Tikz) einfügen

Verfasst: So 5. Jun 2022, 12:55
von Stefan Kottwitz
Übrigens super, Lina, dass Du ein komplettes übersetzbares Beispiel gepostet hast. Ich freue mich immer, wenn ich im Forum einfach auf den "LaTeX-Ausgabe"-Button klicken kann und sofort das Ergebnis kriege. Beim vorigen Post ist auch echt was dran, vllt. poste auf mrunix dann auch als Antwort einen Link hierher auf die mögliche Lösung, für spätere Leser dort.

@Bartman da sind schöne Tips in Deinem Code, super! "text depth", "execute at empty cell", fitting node zum Positionieren u.a. Sachen, die ich mir gleich merken muss.

Stefan