
Ich möchte Text in einer Achsenumgebung auf halber Strecke kennzeichnen. Hier ist ein minimales funktionierendes Beispiel:
\documentclass{article}
\usepackage{currfile}
\usepackage{filecontents}
\usepackage{pgfplots}
\usetikzlibrary{calc}
\begin{filecontents*}{batch_output_5.txt}
NDOF Nelx Nely hnx hny condKBC errabsu errreleu errrelau beta beta_h
640 9 9 1.111111111111111e-01 1.111111111111111e-01 1.234567890000000e+00 3.360958503340160e-03 6.801367190507313e-04 6.801883693667268e-04 1.234567890000000e+00 1.234567890000000e+00
2864 19 19 5.263157894736842e-02 5.263157894736842e-02 1.234567890000000e+00 3.290048281511312e-04 6.939215705384151e-05 6.939186823409962e-05 1.234567890000000e+00 1.234567890000000e+00
6089 29 29 3.448275862068965e-02 3.448275862068965e-02 1.234567890000000e+00 1.950755726148022e-04 4.494377155875972e-05 4.494363189976460e-05 1.234567890000000e+00 1.234567890000000e+00
10450 39 39 2.564102564102564e-02 2.564102564102564e-02 1.234567890000000e+00 1.818287989540975e-04 3.111970271342298e-05 3.111966516370642e-05 1.234567890000000e+00 1.234567890000000e+00
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{loglogaxis}
[
unit vector ratio=1 1 1,
%unit vector ratio*=1 1 1,
ymin=10^-5,
ymax=10^-2,
]
\addplot table[x index=3,y index=7] {\currfiledir batch_output_5.txt};
% Triangle coordinates.
\pgfplotstablegetelem{0}{[index]3}\of{\currfiledir batch_output_5.txt}
\edef\triangleAcoordAx{\pgfplotsretval}
\pgfplotstablegetelem{0}{[index]7}\of{\currfiledir batch_output_5.txt}
\edef\triangleAcoordAy{\pgfplotsretval}
\pgfplotstablegetelem{1}{[index]3}\of{\currfiledir batch_output_5.txt}
\edef\triangleAcoordBx{\pgfplotsretval}
\pgfplotstablegetelem{1}{[index]7}\of{\currfiledir batch_output_5.txt}
\edef\triangleAcoordBy{\pgfplotsretval}
\pgfplotstablegetelem{0}{[index]3}\of{\currfiledir batch_output_5.txt}
\edef\triangleAcoordCx{\pgfplotsretval}
\pgfplotstablegetelem{1}{[index]7}\of{\currfiledir batch_output_5.txt}
\edef\triangleAcoordCy{\pgfplotsretval}
\coordinate (offset) at (0.2,-0.2);
\coordinate (triangleAcoordA) at (axis cs:\triangleAcoordAx,\triangleAcoordAy);
\coordinate (triangleAcoordB) at (axis cs:\triangleAcoordBx,\triangleAcoordBy);
\coordinate (triangleAcoordC) at (axis cs:\triangleAcoordCx,\triangleAcoordCy);
\coordinate (shiftedTriangleAcoordA) at ($(triangleAcoordA)+(offset)$);
\coordinate (shiftedTriangleAcoordB) at ($(triangleAcoordB)+(offset)$);
\coordinate (shiftedTriangleAcoordC) at ($(triangleAcoordC)+(offset)$);
% Draw triangle.
\draw[black] (shiftedTriangleAcoordA)--
(shiftedTriangleAcoordB)--
(shiftedTriangleAcoordC)--
cycle;
\draw ($(shiftedTriangleAcoordB)+(shiftedTriangleAcoordC)-(shiftedTriangleAcoordB)$) node[anchor=north]{1};
\draw ($(shiftedTriangleAcoordC)+(shiftedTriangleAcoordA)-(shiftedTriangleAcoordC)$) node[anchor=west]{2};
\end{loglogaxis}
\end{tikzpicture}
\end{document}
Die letzten beiden \draw
Befehle sollten also etwa so lauten:
\draw ($(shiftedTriangleAcoordB)+((shiftedTriangleAcoordC)-(shiftedTriangleAcoordB))/2$) node[anchor=north]{1};
, aber dieser Befehl wird nicht akzeptiert. Wie kann ich dieses Problem lösen?
Eine Nebenfrage:
1) Gibt es eine elegantere Möglichkeit, die Daten aus der Tabelle in LaTeX-Variablen zu speichern und sie später in Koordinaten zu verwenden? Das sieht alles so umständlich aus.
2) Worauf bezieht sich das 0.2,-0.2
in der Koordinate verwendete „as“ ? Ich glaube nicht, dass es sich auf oder auf Prozentsätze der Breite und Höhe des Graphen bezieht?offset
axis cs
Antwort1
In Arbeit befindliche Lösung
Es gibt wirklich viele Möglichkeiten. Sie könnten
\draw ($(shiftedTriangleAcoordC)!0.5!(shiftedTriangleAcoordA)$) node[anchor=west]{2};
um „auf halbem Weg von shiftedTriangleAcoordC
nach shiftedTriangleAcoordA
“ zu sein, oder verwenden Sie Knoten direkt in der Pfadzeichnung (weniger Wiederholungen), wie:
% Draw triangle.
\draw[black] (shiftedTriangleAcoordA)-- node[left,pos=0.5] {halfway}
(shiftedTriangleAcoordB)--
(shiftedTriangleAcoordC)-- node[right,pos=0.5] {halfway also}
cycle;
Oder nutzen Sie die Lösung aus den Kommentaren.
Betreten der Baustellenzone
Sie haben aber auch nach einer besseren Möglichkeit gefragt, die Koordinaten überhaupt zu definieren. Die Syntax kann auch pos=<fraction>
in Befehlen verwendet werden .\addplot
Fortgesetzt werden...
Antwort2
Um den Text in die Mitte der Zeilen zu bringen, verwenden Sie die Befehle
\coordinate (midBC) at ($(shiftedTriangleAcoordB)+0.5*(shiftedTriangleAcoordC)-0.5*(shiftedTriangleAcoordB)$);
\coordinate (midAC) at ($(shiftedTriangleAcoordC)+0.5*(shiftedTriangleAcoordA)-0.5*(shiftedTriangleAcoordC)$);
\draw (midBC) node[anchor=north]{1};
\draw (midAC) node[anchor=west]{2};
Danke an MaartenDhondt.