![Marcar nodos/coordenadas por etiqueta (PGFPlots)](https://rvso.com/image/309870/Marcar%20nodos%2Fcoordenadas%20por%20etiqueta%20(PGFPlots).png)
Estoy dibujando un diagrama de dispersión, donde los datos están en una tabla y los valores están etiquetados. Quiero conectar ciertos nodos con líneas rectas y para hacerlo, hay que etiquetar los nodos/coordenadas.
Debo decir que tengo una solución que funciona, pero no estoy satisfecho con la implementación, ya que, en mi opinión, es redundante.
Mi código actual para el diagrama de dispersión es el siguiente:
\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}
Y la trama se presenta así:
La parte del código que encuentro redundante es la siguiente:
coordinate [pos=0/6] (A)
coordinate [pos=2/6] (C)
coordinate [pos=3/6] (Č)
coordinate [pos=4/6] (D)
Mi pregunta es la siguiente: ¿Hay alguna manera de hacer referencia a las etiquetas directamente cuando uso \draw (D) -- (C);
?
Respuesta1
Esto se puede hacer, pero la cuestión es si es más elegante que la solución que ya proporcionó.
Para obtener más detalles sobre cómo se puede hacer esto, consulte los comentarios en el código.
% 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}