Knoten/Koordinaten mit Label markieren (PGFPlots)

Knoten/Koordinaten mit Label markieren (PGFPlots)

Ich zeichne ein Streudiagramm, bei dem die Daten in einer Tabelle stehen und die Werte beschriftet sind. Ich möchte bestimmte Knoten mit geraden Linien verbinden und dazu muss man die Knoten/Koordinaten beschriften.

Ich muss sagen, dass ich eine funktionierende Lösung habe, aber mit der Implementierung unzufrieden bin, da sie meiner Meinung nach überflüssig ist.

Mein aktueller Code für das Streudiagramm ist der folgende:

\begin{tikzpicture}
\begin{axis}[
    width=9cm,
]

\addplot[
    scatter,
    black,
    nodes near coords,
    only marks,
    point meta=explicit symbolic,
    mark=o,
] table[
    x=cpu,
    y=error,
    meta=label,
] {
    cpu     error   label
    0.45    0.20    A
    0.35    0.28    B
    0.27    0.30    C
    0.33    0.23    Č
    0.25    0.40    D
    0.33    0.35    E
    0.40    0.35    F

}
    % pos = (index-1)/(N-1)  (index starting from 1)
    coordinate [pos=0/6] (A)
    coordinate [pos=2/6] (C)
    coordinate [pos=3/6] (Č)
    coordinate [pos=4/6] (D)
;

\draw (D) -- (C);
\draw (C) -- (Č);
\draw (Č) -- (A);

\end{axis}
\end{tikzpicture}

Und die Darstellung sieht folgendermaßen aus:

Streudiagramm-Darstellung

Der Teil des Codes, den ich für überflüssig halte, ist der folgende:

coordinate [pos=0/6] (A)
coordinate [pos=2/6] (C)
coordinate [pos=3/6] (Č)
coordinate [pos=4/6] (D)

Meine Frage ist folgende: Gibt es eine Möglichkeit, direkt auf die Etiketten zu verweisen, wenn ich verwende \draw (D) -- (C);?

Antwort1

Dies ist möglich, aber die Frage ist, ob es eleganter ist als Ihre bereits bereitgestellte Lösung.

Weitere Einzelheiten dazu finden Sie in den Kommentaren im Code.

% used PGFPlots v1.14
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        only marks,
        % we want to add `nodes near coords', but this time a bit different than
        % usual. We want to place the node name *to the "marker"* and not to
        % the "normal" `node near coords'. That means the "main" node of the
        % `nodes near coords' shall not show anything
        nodes near coords={},
        % and now we adapt the `nodes near coords style' to our needs
        nodes near coords style={
            % we only need `coordinate' style for the `nodes near coords'
            coordinate,
            % and add a label to the "main" node which shows the `point meta' data
            label={above:\pgfplotspointmeta},
            % in addition we want to name the `nodes near coords' also with
            % the `point meta' data
            name=\pgfplotspointmeta,
        },
        % !!! now comes a critical point !!!
        % Option a)
        % to make that solution work you have set the following option due to
        % technical reasons which is roughly:
        % normally the markers are first collected and are drawn *after*
        % `\end{axis}', in contrast to the `\draw' command. Said that, the
        % named `nodes near coords' are not available during the execution of
        % the `\draw' command
        clip marker paths=true,
        point meta=explicit symbolic,
    ]
        \addplot[
            scatter,
            mark=o,
        ] table [
            x=cpu,
            y=error,
            meta=label,
        ] {
            cpu     error   label
            0.45    0.20    A
            0.35    0.28    B
            0.27    0.30    C
            0.33    0.23    Č
            0.25    0.40    D
            0.33    0.35    E
            0.40    0.35    F
        }
%% the idea is to replace this here ...
%            % pos = (index-1)/(N-1)  (index starting from 1)
%            coordinate [pos=0/6] (A)
%            coordinate [pos=2/6] (C)
%            coordinate [pos=3/6] (Č)
%            coordinate [pos=4/6] (D)
        ;

        % option a)
        \draw (D) -- (C) -- (Č) -- (A);

    \end{axis}

    % option b)
    % the other option -- so when `clip marker path=false' (the default) -- is
    % to draw the connecting line after `\end{axis}', because now the named
    % `nodes near coords' are available
    \draw (D) -- (C) -- (Č) -- (A);

\end{tikzpicture}
\end{document}

Bild, das das Ergebnis des obigen Codes zeigt

verwandte Informationen