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. alt text

Dazu lese ich mittels \pgfplotstablegetelem{<row>}{<column>}\of{<table>}\pgfplotsretval aus der Tabelle und möchte mit einer Schleife die Werte als nodes platzieren.

Ö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 \def\yKoordinate nicht.

alt text

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's gravatar image

cis
9.5k95459491
Akzeptiert-Rate: 29%

bearbeitet 10 Feb '18, 22:11


Konnte das Problem so lösen:

alt text

Ö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}
Permanenter link

beantwortet 11 Feb '18, 18:24

cis's gravatar image

cis
9.5k95459491
Akzeptiert-Rate: 29%

bearbeitet 11 Feb '18, 18:24

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×298

gestellte Frage: 09 Feb '18, 18:44

Frage wurde gesehen: 4,198 Mal

zuletzt geändert: 11 Feb '18, 18:24