pgfplots - bestimmte Spalten aus Datei einlesen Thema ist als GELÖST markiert

Tabellen und Grafiken erstellen und anordnen


K7N2-Delta

pgfplots - bestimmte Spalten aus Datei einlesen

Beitrag 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 ;-)

Stamm-

Weiterführemde Lektüre

Beitrag 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.

K7N2-Delta

Beitrag 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..

K7N2-Delta

Beitrag 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

Stamm-

Eine Idee

Beitrag 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.

K7N2-Delta

Beitrag 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.

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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}
Bild

Was Du mit dem Verbinden der drei Plots meinst, verstehe ich nicht. Bei mir werden sie jedenfalls nicht verbunden.

Gruß
Elke
Dateianhänge
gl_filterthisrowno.png
gl_filterthisrowno.png (19.74 KiB) 2897 mal betrachtet

K7N2-Delta

Beitrag 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.

K7N2-Delta

Beitrag 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...

Antworten