Seite 1 von 1
pgfplots - bestimmte Spalten aus Datei einlesen
Verfasst: Do 26. Feb 2015, 11:39
von K7N2-Delta
Hallo,
Den Befehl "using 1:3" für GnuPlot, um bestimmte Spalten einer Datei zu plotten, gibt es sicherlich auch für pgfplots.. nur finde ich Ihn leider nicht.
Falls als Antwort auf diese Frage ein Verweis auf
http://pgfplots.sourceforge.net/pgfplots.pdf
geplant ist, dann bitte mit Kapitelnummer oder Hinweis wonach jemand mit beschränkten Englisch- /TeX-Kenntnissen suchen muss

Weiterführemde Lektüre
Verfasst: Do 26. Feb 2015, 12:02
von Stamm-
K7N2-Delta hat geschrieben:[…] Den Befehl "using 1:3" für GnuPlot, um bestimmte Spalten einer Datei zu plotten, gibt es sicherlich auch für pgfplots.. nur finde ich Ihn leider nicht. […]
Gnuplot kann auch explizit in »
pgfplots« mit der Eingabe eines Scripts bei
\addplot verwendet werden. In der Anleitung nach dem Schlüssel raw gnuplot suchen oder gleich Abschnitt 4.3.5 anschauen.
K7N2-Delta hat geschrieben:[…] Falls als Antwort auf diese Frage ein Verweis auf […] geplant ist, dann bitte mit Kapitelnummer oder Hinweis wonach jemand mit beschränkten Englisch- /TeX-Kenntnissen suchen muss ;-)
Wenn kein
Minimabeispiel erstellt wird, ist der Verweis auf die Anleitung mehr als angebracht. Lies Abschnitt 4.3.4 der Anleitung von »
pgfplots« V1.12 bezüglich
\thisrowno.
Bei weiteren Problemen bitte
mit ordentlichem Beispiel zurückmelden.
Verfasst: Do 26. Feb 2015, 12:46
von K7N2-Delta
Danke für die Antwort! Für mein Problem hat schon folgendes gereicht
\addplot table [
%Auswahl Spalten:
x=Uce, y=Ic] {../Messwerte/211b.txt};
Ich war auch schon in der Nähe, im Kapitel 4.3.2, mir fällt es aber ziemlich schwer die nötigen Informationen aus dem manual zu ziehen.
Hab noch ein weiteres ähnliches Problem mit den Zeilen und werde gleich mal ein Minimalbeispiel erstellen..
Verfasst: Do 26. Feb 2015, 12:57
von K7N2-Delta
\documentclass[10pt,a4paper,liststotoc]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{multirow} % Zeilen in Tabelle verbinden
\usepackage{tikz,pgfplots}
\begin{document}
\begin{diagramm}[htb]
\centering
\begin{tikzpicture}
\begin{axis}[
\addplot table [
%Auswahl Spalten
x=Uce, y=Ic] {../Messwerte/211b.txt};
\end{axis}
\end{tikzpicture}
\end{diagramm}
\end{document}
Nun möchte ich gerne 3 Kennlinien in dem Diagram darstellen, für Ib = 25, Ib=50 und Ib = 75.
Die Anleitung für pgfplots gibt es nicht zufällig in Deutsch oder?
Inhalt der Datei 211b.txt:
Ib Ic Ube Uce
#in mA in mA in mV in V
25 5.33 690 0.130
25 6 690 0.146
25 7.57 692 0.190
25 8 698 0.215
25 8.19 699 0.230
25 8.85 700 0.466
25 9 700 0.694
25 11.09 665 9.600
#
50 5.35 693 0.93
50 10 711 0.146
50 14 720 0.240
50 16 718 0.336
50 18 716 0.550
50 19.2 709 1.450
50 20.6 693 3.190
50 22.75 670 7.000
#
75 5.35 697 0.78
75 9.99 715 0.115
75 14.97 729 0.168
75 20 733 0.312
75 22.3 731 0.400
75 26.2 734 0.740
75 27.89 728 1.590
75 32.15 690 4.830
Eine Idee
Verfasst: Do 26. Feb 2015, 14:24
von Stamm-
Ich kann da nur eine Lösung anbieten, die hier auf der Verteilung der Datensätze auf drei Dateien beruht. Etwas Anderes fällt mir gerade nicht ein. Die Verwendung des Pakets »
filecontents« und der Umgebung
filecontents* ist im eigentlichen Dokument natürlich nicht notwendig.
\documentclass[11pt,border=2pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{
adieresis={ä},
germandbls={ß}
}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\pgfplotsset{
compat=1.12,
xlabel near ticks,
ylabel near ticks
}
\usepackage{filecontents}
\begin{filecontents*}{Ib25.dat}
Ib Ic Ube Uce
#in mA in mA in mV in V
25 5.33 690 0.130
25 6 690 0.146
25 7.57 692 0.190
25 8 698 0.215
25 8.19 699 0.230
25 8.85 700 0.466
25 9 700 0.694
25 11.09 665 9.600
\end{filecontents*}
\begin{filecontents*}{Ib50.dat}
Ib Ic Ube Uce
#in mA in mA in mV in V
50 5.35 693 0.93
50 10 711 0.146
50 14 720 0.240
50 16 718 0.336
50 18 716 0.550
50 19.2 709 1.450
50 20.6 693 3.190
50 22.75 670 7.000
\end{filecontents*}
\begin{filecontents*}{Ib75.dat}
Ib Ic Ube Uce
#in mA in mA in mV in V
75 5.35 697 0.78
75 9.99 715 0.115
75 14.97 729 0.168
75 20 733 0.312
75 22.3 731 0.400
75 26.2 734 0.740
75 27.89 728 1.590
75 32.15 690 4.830
\end{filecontents*}
\begin{document}
\begin{tikzpicture}[font=\scriptsize]
\begin{axis}[
width=10cm,
height=6cm,
xmin=0,
xmax=10,
xlabel={$x$"=Achse},
ymin=0,
ymax=40,
ylabel={$y$"=Achse},
]
\addplot table[x=Uce,y=Ic] {Ib25.dat};
\addlegendentry{25\,V};
\addplot table[x=Uce,y=Ic] {Ib50.dat};
\addlegendentry{50\,V};
\addplot table[x=Uce,y=Ic] {Ib75.dat};
\addlegendentry{75\,V};
\end{axis}
\end{tikzpicture}
\end{document}
In der Anleitung von »
pgfplots« wird am Ende des Abschnitts 4.3.2 (Seite 51, Version 1.12) der Schlüssel skip first n erläutert. Damit können die ersten n Zeilen einer Datei ausgelassen werden. Ich konnte jedoch nichts finden, wodurch die Anzahl der zu verwendenden Zeilen begrenzt werden kann und somit nicht der Rest des Datensatzes ausgegeben wird. Deshalb die Entscheidung zur Aufteilung auf mehrere Dateien.
Verfasst: Do 26. Feb 2015, 14:49
von K7N2-Delta
Danke für die Antwort!
Trotzdem schade das es anscheinend nur die Lösung gibt, die Daten aufzuteilen.
Gibt es nicht die Möglichkeit, wenigstens das Verbinden der Punkte zwischen Ib = 25 und Ib = 50, sowie zwischen Ib = 50 und Ib = 75 zu verhindern?
Dann hätte ich ja auch das gewünschte Ergebnis.
Verfasst: Do 26. Feb 2015, 15:00
von esdd
Man kann dafür auch nur eine Tabelle verwenden:
\documentclass[11pt,border=2pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{
adieresis={ä},
germandbls={ß}
}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\pgfplotsset{
compat=1.11,
xlabel near ticks,
ylabel near ticks
}
\usepackage{filecontents}
\begin{filecontents*}{211b.txt}
Ib Ic Ube Uce
#in mA in mA in mV in V
25 5.33 690 0.130
25 6 690 0.146
25 7.57 692 0.190
25 8 698 0.215
25 8.19 699 0.230
25 8.85 700 0.466
25 9 700 0.694
25 11.09 665 9.600
#
50 5.35 693 0.93
50 10 711 0.146
50 14 720 0.240
50 16 718 0.336
50 18 716 0.550
50 19.2 709 1.450
50 20.6 693 3.190
50 22.75 670 7.000
#
75 5.35 697 0.78
75 9.99 715 0.115
75 14.97 729 0.168
75 20 733 0.312
75 22.3 731 0.400
75 26.2 734 0.740
75 27.89 728 1.590
75 32.15 690 4.830
\end{filecontents*}
\begin{document}
\begin{tikzpicture}[font=\scriptsize]
\begin{axis}[
width=10cm,
height=6cm,
xmin=0,
xmax=10,
xlabel={$x$"=Achse},
ymin=0,
ymax=40,
ylabel={$y$"=Achse},
]
\pgfplotsinvokeforeach{25,50,75}{
\addplot table[x=Uce,y=Ic,restrict expr to domain={\thisrowno{0}}{#1:#1}]{211b.txt};
\addlegendentry{#1\,V};}
\end{axis}
\end{tikzpicture}
\end{document}
Was Du mit dem Verbinden der drei Plots meinst, verstehe ich nicht. Bei mir werden sie jedenfalls nicht verbunden.
Gruß
Elke
Verfasst: Do 26. Feb 2015, 15:54
von K7N2-Delta
Beste!!
Genau DAS habe ich gesucht! Danke!!
wenn du
,restrict expr to domain={\thisrowno{0}}{#1:#1}
weg lässt, dann weißt du auch was ich mit verbundenen Kennlinien meine.
Es läuft aber ich steig noch nicht dahinter wie du auf diese Zauberformel gekommen bist. Da es im manual auch ziemlich weit hinten steht, gehe ich mal davon aus, dass ich noch ne ganze weile TeXxen muss, bis ich das kapier.
Verfasst: Do 26. Feb 2015, 16:13
von K7N2-Delta
und wenn wir schon dabei sind... nun benötige ich eine Tangente durch einen bestimmten Punkt...
So Zeit wird gestoppt und vll finde ich die Lösung ja dieses mal...