Legende rechts neben Konfusionsmatrix (Tikz) einfügen

Tabellen und Grafiken erstellen und anordnen


lina_24642
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Mo 18. Apr 2022, 05:56

Legende rechts neben Konfusionsmatrix (Tikz) einfügen

Beitrag 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}

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

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

Beitrag 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}
Zuletzt geändert von Bartman am Fr 3. Jun 2022, 17:05, insgesamt 1-mal geändert.

Crosspostverlinker

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

Beitrag 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!

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2500
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

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

Beitrag 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

ich meine ja nur

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

Beitrag 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".

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2500
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

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

Beitrag 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

Antworten