Ich habe hier eine Tabelle Öffne in Overleaf
x y1 y2 Info 1 4 9 A 2 5 8 B 3 3 7 C und möchte einen Graphen zeichnen, bei dem links und rechts die Achsen y1 und y2 auftauchen, d.h. Dazu lese ich mittels Öffne in Overleaf
% Zweite y-Achse % Maximalen x-Wert für node-Platzierung auslesen \def\xMax{\pgfkeysvalueof{/pgfplots/xmax}} % \pgfplotsinvokeforeach{0,1,...,2}{%% % Koordinaten lesen \ZelleLesen{#1}{y1} \def\yKoordinate{\pgfplotsretval} % <---- Problem hier!!! % Koordinaten setzen \node[red, anchor=west, xshift=0.125pt] at (axis cs: \xMax,\yKoordinate) {\Zelle{#1}{y2}}; }%% Dabei geht aber etwas schief: Alle Werte werden an die selbe Stelle gesetzt. Scheints ändert sich die Was muss ich da anders machen? PS: Ein ähnliches Problem gab es schonmal hier Wie kann ich in pgfplots den Parameter an eine Parameterfunktion-Kurvenschar schreiben? aber die Lösung dort funktioniert gleich mal wieder nicht. Öffne in Overleaf
%\documentclass[]{article} \documentclass[border=5mm, varwidth]{standalone} \usepackage{pgfplots} \pgfplotsset{compat=1.13} \begin{filecontents}{datatable.dat} x y1 y2 Info 1 4 9 A 2 5 8 B 3 3 7 C \end{filecontents} \begin{document} % Tabellen-Element auslesen %\pgfplotstablegetelem{<row>}{<column>}\of{<table>}\pgfplotsretval \newcommand\ZelleLesen[2]{\pgfplotstablegetelem{#1}{#2}\of{datatable.dat}} \newcommand\Zelle[2]{\ZelleLesen{#1}{#2}\pgfplotsretval} Test: \Zelle{0}{y2} \\ \begin{tikzpicture} \begin{axis}[ clip=false, %y = 1cm, visualization depends on={value \thisrowno{3} \as \Name}, nodes near coords={\Name}, xtick = data, ytick=data, ] \addplot [only marks, mark=*] table[] {datatable.dat}; % % Zweite y-Achse % Maximalen x-Wert für node-Platzierung auslesen \def\xMax{\pgfkeysvalueof{/pgfplots/xmax}} % \pgfplotstablegetrowsof{datatable.dat} \pgfmathsetmacro{\Zeilenzahl}{\pgfplotsretval-1} \pgfplotsinvokeforeach{0,...,\Zeilenzahl}{%% % Koordinaten lesen \ZelleLesen{#1}{y1} \def\yKoordinate{\pgfplotsretval} % <---- Problem hier!!! % Koordinaten setzen \node[red, anchor=west, xshift=0.125pt] at (axis cs: \xMax,\yKoordinate) {\Zelle{#1}{y2}}; }%% \end{axis} \end{tikzpicture} \end{document} gefragt 09 Feb '18, 18:44 cis |
Konnte das Problem so lösen: Öffne in Overleaf
%\documentclass[]{article} \documentclass[border=5mm, varwidth]{standalone} \usepackage{filecontents} \usepackage{pgfplots} \pgfplotsset{compat=1.13} \begin{filecontents*}{datatable.dat} Zeile y1 y2 0 4 9 1 5 8 2 3 7 \end{filecontents*} \begin{document} % Tabellen-Element auslesen %\pgfplotstablegetelem{<row>}{<column>}\of{<table>}\pgfplotsretval \newcommand\ZelleLesen[2]{\pgfplotstablegetelem{#1}{#2}\of{datatable.dat}} \newcommand\Zelle[2]{\ZelleLesen{#1}{#2}\pgfplotsretval} Test: \Zelle{0}{y1} \\ \begin{tikzpicture} \begin{axis}[ clip=false, xtick = data, ytick=data, ] \addplot [only marks, mark=*, visualization depends on={value \thisrowno{3} \as \Name}, nodes near coords={\Name}, ] table[] {datatable2.dat}; % % Zeilenzahl ermitteln \pgfplotstablegetrowsof{datatable.dat} \pgfmathtruncatemacro{\Zeilenzahl}{\pgfplotsretval-1} % Größten x-Wert auslesen \def\xMax{\pgfkeysvalueof{/pgfplots/xmax}} % % Koordinaten der zweiten y-Achse platzieren \pgfplotsinvokeforeach{0,...,\Zeilenzahl}{%% \ZelleLesen{#1}{y1} \addplot[only marks, mark=text, text mark={}, % leer lassen % \Zelle{#1}{y2} nodes near coords={\Zelle{#1}{y2}}, every node near coord/.append style={red, anchor= west, shift={(axis direction cs:\xMax-1,0)}, xshift=0.125pt, }, ]coordinates {(1,\pgfplotsretval)}; }%% % Test: %\node at (axis cs: 2,4) {\xMax / \Zeilenzahl}; % \end{axis} \end{tikzpicture} \end{document} beantwortet 11 Feb '18, 18:24 cis |