Fehler bei zu großen Werten [pgfplots]

Tabellen und Grafiken erstellen und anordnen


Quasten.Christian
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: So 3. Feb 2013, 23:01
Wohnort: Aachen

Fehler bei zu großen Werten [pgfplots]

Beitrag von Quasten.Christian »

Hallo zusammen,

ich habe ein Problem bei der Verwendung von pgfplots bzw. tikzpicture.
Ich habe ein File mit Messwerten bzw. Simulationsdaten, bei denen es deutliche Ausreißer gibt.
In dem Code Beispiel wird dies bei der Mode 17 deutlich (aktuell auskommentiert).
Wenn diese mit berücksichtigt wird gibt Latex 101 Fehler aus.
Dies liegt eindeutig an dem Wert -22790.00 in Verbindung mit ymin bzw. ymax.
Wenn ich den Wertebereich vergrößere (z.B. ymin=-23000) dann klappt es auch mit den größeren Zahlen. (Ich möchte aber die Ausreißer garnicht abbilden).

Kann mir jemand sagen warum LateX den Fehler ausgibt und eventuell wie ich den Code ändern kann, ohne den angezeigten Wertebereich zu ändern.

Vielen Dank im Voraus.

MfG Christian

\documentclass{scrbook}								% KOMA Script-Klasse

\usepackage{pgfplots} % LaTeX Diagramme erstellen
\pgfplotsset
	{
	 compat=newest,
	 width=\textwidth,
	 height=.6\textwidth,
	 axis x line    = bottom,
   axis y line    = left,
	 enlargelimits  = false,
   x tick label/.style={at={(1,0)},below,yshift=0pt,xshift=0pt,inner sep=0pt,},
   y tick label/.style={at={(0,1)},left,yshift=0pt,xshift=0pt,inner sep=0pt1},
   }
\pgfkeys{/pgf/number format/.cd,
set thousands separator={},
set decimal separator={,}}

\usepackage{tikz}  %Skizzen

\begin{document}

\begin{figure}
\begin{center}
\begin{tikzpicture}[scale=1]    
 \begin{axis}
  [
   legend entries = Mit Felge,
   xlabel         = Frequenz,
   xmin           = 500,
   xmax           = 6500,
   xtick          = {1000,2000,...,6000},
   ylabel         = Realteil, 
   ymin           = -2.5,
   ymax           = 2.5,   
%   ytick          = {-100,-50,-1,0,1,2},     
  ]
\addplot [
	 color = red,
	 fill = red,
	 mark = *,
	 only marks,
	 very thin
	] table [x=Frequenz, y=Realteil] {
	Mode	Realteil	Rad	Frequenz	Damping
1	-0.20	6455.4	1027.4	0
2	0.00	6508.3	1035.8	0
3	0.00	6520.7	1037.8	0
4	-0.58	6628	1054.9	0.00018
5	-0.12	6848.9	1090	0
6	-0.47	7745.2	1232.7	0.00012
7	-3.03	8468.9	1347.9	0.00072
8	-0.66	8629.9	1373.5	0.00015
9	-1.31	8865.1	1410.9	0.0003
10	-0.64	8955.5	1425.3	0.00014
11	-0.60	9013.3	1434.5	0.00013
12	-0.27	9058.3	1441.7	0
13	-2.61	9263.6	1474.4	0.00056
14	-1.84	9681	1540.8	0.00038
15	0.00	9686.5	1541.7	0
16	0.00	9703.7	1544.4	0
%17	-22790.00	9808.2	1561	4.64704
};
\end{axis}       
\end{tikzpicture}
\caption{default}
\label{default1}
\end{center}
\end{figure}

\end{document}

Epllus
Forum-Guru
Forum-Guru
Beiträge: 470
Registriert: So 23. Sep 2012, 17:31

Beitrag von Epllus »

Kann mir jemand sagen warum LateX den Fehler ausgibt und eventuell wie ich den Code ändern kann, ohne den angezeigten Wertebereich zu ändern.
Die Frage hast du eigentlich schon beantwortet: es liegt an ymin.
und eventuell wie ich den Code ändern kann, ohne den angezeigten Wertebereich zu ändern.
Ich bin mir nicht sicher was du möchtest, du möchtest die Ausreißer eh nicht darstellen, also kannst du das Prozentzeichen behalten, damit der Ausreißer nicht dargestellt wird.

Ich fürchte ich versteh nicht ganz worauf die hinauswillst.

Freundliche Grüße
Epllus

Quasten.Christian
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: So 3. Feb 2013, 23:01
Wohnort: Aachen

Beitrag von Quasten.Christian »

Hallo,

danke für deine Antwort.
Nach längerem versuchen habe ich rausgefunden, dass wenn ich ymin vergrößere bzw. verringere das es dann klappt.

Das Problem ist, dass die dargestellten Daten nur ein beispiel sind.
Ich habe mehrere Dateien, die ich einlese mit jeweils ca. 200 Zeilen.
Dh. ich müsste alles manuell durchstöbern und aussortieren. Das wäre zu aufwändig.

Es treten in diesen files neben den neagtiven Werten und der Null auch vereinzelt positive Werte auf.
Ich möchte im Endeffekt nur die positiven Werte ausgeben bzw. anzeigen lassen. Alles darunter kann abgeschnitten werden.

Ich wollte halt einfach ymin anheben (optimalerweise ymin=0) um alles darunter wegfallen zu lassen.

Über weitere Hilfe beim Code würde ich mich sehr freuen.

Epllus
Forum-Guru
Forum-Guru
Beiträge: 470
Registriert: So 23. Sep 2012, 17:31

Beitrag von Epllus »

Versuch folgendes:
\documentclass{scrbook}                        % KOMA Script-Klasse 

\usepackage{pgfplots} % LaTeX Diagramme erstellen 
\pgfplotsset 
   { 
    compat=newest, 
    width=\textwidth, 
    height=.6\textwidth, 
    axis x line    = bottom, 
   axis y line    = left, 
    enlargelimits  = false, 
   x tick label/.style={at={(1,0)},below,yshift=0pt,xshift=0pt,inner sep=0pt,}, 
   y tick label/.style={at={(0,1)},left,yshift=0pt,xshift=0pt,inner sep=0pt1}, 
   } 
\pgfkeys{/pgf/number format/.cd, 
set thousands separator={}, 
set decimal separator={,}} 

\usepackage{tikz}  %Skizzen 

\begin{document} 

\begin{figure} 
\begin{center} 
\begin{tikzpicture}[scale=1]     
 \begin{axis} 
  [ 
   legend entries = Mit Felge, 
   xlabel         = Frequenz, 
   xmin           = 500, 
   xmax           = 6500, 
   xtick          = {1000,2000,...,6000}, 
   ylabel         = Realteil, 
   ymin           = -2.5, 
   ymax           = 2.5,   
restrict y to domain=-2.5:2.5,     % hoffe es funktioniert
%   ytick          = {-100,-50,-1,0,1,2},     
  ] 
\addplot [ 
    color = red, 
    fill = red, 
    mark = *, 
    only marks, 
    very thin 
   ] table [x=Frequenz, y=Realteil] { 
   Mode   Realteil   Rad   Frequenz   Damping 
1   -0.20   6455.4   1027.4   0 
2   0.00   6508.3   1035.8   0 
3   0.00   6520.7   1037.8   0 
4   -0.58   6628   1054.9   0.00018 
5   -0.12   6848.9   1090   0 
6   -0.47   7745.2   1232.7   0.00012 
7   -3.03   8468.9   1347.9   0.00072 
8   -0.66   8629.9   1373.5   0.00015 
9   -1.31   8865.1   1410.9   0.0003 
10   -0.64   8955.5   1425.3   0.00014 
11   -0.60   9013.3   1434.5   0.00013 
12   -0.27   9058.3   1441.7   0 
13   -2.61   9263.6   1474.4   0.00056 
14   -1.84   9681   1540.8   0.00038 
15   0.00   9686.5   1541.7   0 
16   0.00   9703.7   1544.4   0 
17   -22790.00   9808.2   1561   4.64704 
}; 
\end{axis}       
\end{tikzpicture} 
\caption{default} 
\label{default1} 
\end{center} 
\end{figure} 

\end{document} 
Hoffe es funktioniert mit restrict y to domain=-2.5:2.5.
Es funktioniert jedenfalls mit Model 17.

Hoffe es hilft
Epllus

PS. Vielleicht habe ich es übersehen, aber hast du \pgfplotsset{compat=1.7} drinnen?
Bei pgfplots ist das wichtig, da man nicht weiß, wie sich zukünftige Änderungen verhalten werden.

Quasten.Christian
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: So 3. Feb 2013, 23:01
Wohnort: Aachen

Beitrag von Quasten.Christian »

Perfekt.
Funktioniert sehr gut.
Danke.


Trotzdem würde es mich interessieren, warum der Fehler auftritt wenn ich es mit ymin mache. Wenn ich ymin=-23000 setze, dann klappt es logischerweise. Bei ymin=-220 geht es z.B. auch noch, obwohl der Wert -22790 sehr weit entfernt ist. Bei ymin=-22 z.B. ist es dann vorbei mit der Zeile 17.

Falls jemand was weiß, mich interessiert es einfach.

feuersaenger
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 91
Registriert: Mi 5. Okt 2011, 18:24
Wohnort: Rheinbach

Beitrag von feuersaenger »

Hallo Christian,

zur Erlaeuterung: pgfplots transformiert den angezeigten Datenbereich so, dass er "gut" in den Zahlenbereich -16000 ... 16000 passt. Das ist naemlich genau der Bereich, innerhalb dessen man pdf koordinaten schreiben kann (und auch innerhalb dessen TeX nativ rechnen kann).

Es verwendet dazu eine (affin) lineare Abbildung.

Das funktioniert sehr gut, solange der Datenbereich und der angezeigte Bereich grob zusammenpassen.

Wenn nun einzelne Koordinaten weit aus dem angezeigten Bereich gehen, resultiert die erwaehnte Transformation dummerweise nicht in einer Zahl zwischen -16000 ... 16000. Das, wiederum, verkraftet TeX nicht - und pgfplots faengt es nicht.

Genau das passiert, je nachdem, wie Du ymin waehlst: dann ist der Unterschied zwischen dem angezeigten und dem Datenbereich einige Groessenordnungen auseinander.

Das "restrict y to domain" schmeisste alle y coordinaten ausserhalb des angegebenen domains schlicht weg. Darum klappt es damit.

Mit liebem Gruss

Christian

Quasten.Christian
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: So 3. Feb 2013, 23:01
Wohnort: Aachen

Beitrag von Quasten.Christian »

Hallo Christian,

danke für die Erklärung.
Übrigens ist es ein sehr schönes Paket. :D

Danke.

MfG Christian

Quasten.Christian
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: So 3. Feb 2013, 23:01
Wohnort: Aachen

Beitrag von Quasten.Christian »

Ich habe noch eine Frage zu dem oben genannten Beispiel.

Ich würde gerne zusätzlich die Werte als Wertetabelle über dem Diagramm ausgeben. Aber natürlich nur die Werte, welche in meinem Diagramm dargestellt werden (alle positiven Werte aus dem txt. file).

Wenn ich nun z.B. den unten stehenden Code oben einbaue, habe ich wieder Fehler (wahrscheinlich wieder das gleiche Problem mit der zu großen Zahl).
\pgfplotstableread{data/simulations/Berechnung_AU481_FN3_basis_mRad_mFB.txt}\data

   \pgfplotstabletypeset[columns={Frequenz,Realteil}, row predicate/.code={%
   \pgfplotstablegetelem{#1}{Realteil}\of{\data}
   \ifnum\pgfplotsretval>0\relax
   \else\pgfplotstableuserowfalse\fi}]
	{\data}


Wenn ich das einsetze,
\pgfplotstablegetelem{#1}{Mode}\of{\data}
   \ifnum\pgfplotsretval>0\relax
funktioniert es. Ich muss aber die Spalte Realteil nach den Werten >0 durchsuchen.



Inhalt Berechnung_AU481_FN3_basis_mRad_mFB.txt

Realteil Mode Rad Frequenz Damping
-0.20 1 6455.4 1027.4 0
0.00 2 6508.3 1035.8 0
0.00 3 6520.7 1037.8 0
-0.58 4 6628 1054.9 0.00018
-0.12 5 6848.9 1090 0
-0.47 6 7745.2 1232.7 0.00012
-3.03 7 8468.9 1347.9 0.00072
-0.66 8 8629.9 1373.5 0.00015
-1.31 9 8865.1 1410.9 0.0003
-0.64 10 8955.5 1425.3 0.00014
-0.60 11 9013.3 1434.5 0.00013
-0.27 12 9058.3 1441.7 0
-2.61 13 9263.6 1474.4 0.00056
-1.84 14 9681 1540.8 0.00038
0.00 15 9686.5 1541.7 0
0.00 16 9703.7 1544.4 0
-22790.00 17 9808.2 1561 4.64704
-2.12 18 10185 1621 0.00042
-0.13 19 10327 1643.6 0
-46.91 20 10573 1682.8 0.00887
-5.61 21 10709 1704.5 0.00105
-1.87 22 10824 1722.7 0.00035
-705.70 23 11164 1776.9 0.12642
-0.38 24 11218 1785.4 0
-2.22 25 11233 1787.8 0.00039
-1.87 26 11307 1799.5 0.00033
-2.64 27 12041 1916.5 0.00044
-17.33 28 12457 1982.7 0.00278
-192.70 29 12549 1997.2 0.03071
-1.07 30 12600 2005.4 0.00017
5.64 31 12626 2009.4 -0.00089
-16.19 32 12680 2018.1 0.00255

Quasten.Christian
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: So 3. Feb 2013, 23:01
Wohnort: Aachen

Beitrag von Quasten.Christian »

Hat keiner eine Idee?

Antworten