PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tikz / PGFplots: Fehler - dimension too large



Barny.G
29-06-2014, 21:24
Hallo liebe Gemeinde,

schon seit einiger Zeit schreibe ich erfolgreich mit tikz in LaTeX. Meist habe ich die auftretenden Fehler finden können (auch mit Hilfe der Archiv-Funktion hier ;)) aber heute komme ich nicht weiter...

Der Fehler "! Dimension too large" wird meines Erachtens nach oft von einem Nenner, der Null wird, im tikz-Paket hervorgerufen. Leider kann ich beim besten Willen und mehrtägiger Suche (natürlich nicht zusammenhängend...) den Fehler im script nicht finden. Vielleicht kann sich ja mal "jemand" mein Beispiel ansehen?


\documentclass{scrreprt}
\usepackage{geometry}
\geometry{a4paper,left=35mm,right=28mm, top=25mm, bottom=27mm}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[locale = DE, range-phrase = --]{siunitx}
\DeclareSIUnit\gon{gon}
\let\cdot=\mult
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,calc,fit ,patterns,through}
%\usepackage{empheq}
%\usepackage{amssymb}
\usepackage{pgfplots} % für schöne MatLab-Grafiken
\newcommand{\pgfwidth}{.8\linewidth}
\newcommand{\pgfheight}{.6\linewidth}
\pgfplotsset{compat=1.7}

\begin{document}

\begin{figure}[H]
\centering
\begin{tikzpicture}%
\begin{axis}[
legend columns=1,
legend cell align=left,
tick pos=left,
tick align=inside,
title={$\lambda = \SIrange{1e-30}{100}$},
xlabel={Residuennorm $\left\|\MF\left(\Vm\right) - \Vd\right\|$},
ylabel={Modellnorm $\left\|\Vm\right\|$},
xmode=log,
ymode=log,
xmin=6.3939e-09,
xmax=7.0346e-09,
ymin=100,
ymax=10000,
xtick={6.4565e-09,6.6069e-09,6.7608e-09,6.9183e-09},
ytick={100,1000,10000},
width=\pgfwidth,
height=\pgfheight]
\legend{%
L-Kurve\\%
curvature\\%
$\min\left( \left\|\MF\left(\Vm\right) - \Vd\right\| + \left\|\Vm\right\| \right)$ \\%
}%
\addplot[
line width=.5pt,
color=red,
solid,
mark=diamond*,
mark options={solid,scale=0.5}]
plot coordinates {
(7.033368e-09, 5.490693e+03)
(7.033373e-09, 5.458126e+03)
(7.033397e-09, 5.316605e+03)
(7.033505e-09, 4.766770e+03)
(7.033912e-09, 3.313811e+03)
(7.034581e-09, 1.711119e+03)
(7.034599e-09, 1.215509e+03)
(7.032693e-09, 1.166645e+03)
(7.023810e-09, 1.151235e+03)
(6.988095e-09, 1.112351e+03)
(6.865412e-09, 1.044649e+03)
(6.604532e-09, 9.583750e+02)
(6.432061e-09, 9.137736e+02)
(6.401853e-09, 9.144226e+02)
(6.393924e-09, 9.162499e+02)
(6.399755e-09, 9.161154e+02)
(6.405086e-09, 9.159514e+02)
(6.406745e-09, 9.159036e+02)
(6.407144e-09, 9.158924e+02)
(6.407235e-09, 9.158899e+02)
(6.407255e-09, 9.158893e+02)
(6.407259e-09, 9.158892e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
};
\addplot[
line width=.5pt,
color=blue,
only marks,
mark=asterisk,
mark options={solid}]
plot coordinates {
(6.407260e-09, 9.158891e+02)
};
\addplot[
line width=.5pt,
color=black,
only marks,
mark=triangle,
mark options={solid,rotate=180}]
plot coordinates {
(6.432061e-09, 9.137736e+02)
};
\end{axis}
\end{tikzpicture}%
\caption{L-Kurven-Kriterium}
\label{fig:LKrv}%
\end{figure}

\end{document}

Bitte nicht abschrecken lassen, die meisten Zeilen sind Koordinaten. Auch habe ich schon wechselnd verschiedene Zeilen (auch mal alle Koordinaten) ausgeblendet - ohne Erfolg. Wahrscheinlich liegt der Fehler schon in den ersten Zeilen nach
\begin{tikzpicture}%
\begin{axis}[

Ich hoffe, dass jemand schon mal den gleichen Fehler gemacht hat und ich lernen kann...

Viele Grüße

Thomas.

Feuersaenger
29-06-2014, 22:06
Du bist damit unbeabsichtigt in einen Datenbereich gelaufen, den pgfplots nicht mehr kann (und das nicht erkennt): Dein auf der x Achse angezeigter Datenbereich ist so klein, dass, wenn pgfplots diesen auf width "aufblaest", es an Berechnungsgrenzen stoesst.

Beheben laesst sich das aktuell leider nur, indem Du den Datenbereich kuenstlich vergroesserst. In Deinem Fall reichen 100% (enlarge x limits=1). Ein entsprechend reduziertes Beispiel koennte wie folgt aussehen:



\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}

\begin{document}

\begin{tikzpicture}%
\begin{axis}[
xmode=log,
ymode=log,
xmin=6.3939e-09,
xmax=7.0346e-09,
enlarge x limits=1,
]
\addplot[
line width=.5pt,
color=red,
solid,
mark=diamond*,
mark options={solid,scale=0.5}]
plot coordinates {
(7.033368e-09, 5.490693e+03)
(7.033373e-09, 5.458126e+03)
(7.033397e-09, 5.316605e+03)
(7.033505e-09, 4.766770e+03)
(7.033912e-09, 3.313811e+03)
(7.034581e-09, 1.711119e+03)
(7.034599e-09, 1.215509e+03)
(7.032693e-09, 1.166645e+03)
(7.023810e-09, 1.151235e+03)
(6.988095e-09, 1.112351e+03)
(6.865412e-09, 1.044649e+03)
(6.604532e-09, 9.583750e+02)
(6.432061e-09, 9.137736e+02)
(6.401853e-09, 9.144226e+02)
(6.393924e-09, 9.162499e+02)
(6.399755e-09, 9.161154e+02)
(6.405086e-09, 9.159514e+02)
(6.406745e-09, 9.159036e+02)
(6.407144e-09, 9.158924e+02)
(6.407235e-09, 9.158899e+02)
(6.407255e-09, 9.158893e+02)
(6.407259e-09, 9.158892e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
(6.407260e-09, 9.158891e+02)
};
\addplot[
line width=.5pt,
color=blue,
only marks,
mark=asterisk,
mark options={solid}]
plot coordinates {
(6.407260e-09, 9.158891e+02)
};
\addplot[
line width=.5pt,
color=black,
only marks,
mark=triangle,
mark options={solid,rotate=180}]
plot coordinates {
(6.432061e-09, 9.137736e+02)
};
\end{axis}
\end{tikzpicture}%

\end{document}


6041

Ich schreibe das auf die todo liste fuer pgfplots (es laesst sich programmatisch handhaben).

Barny.G
30-06-2014, 10:14
Hallo Herr Feuersänger,

na ich habe vielleicht gestaunt vom Ersteller all dieser schönen tools direkt eine Antwort zu bekommen... Vielen Dank!

Eine Frage habe ich dann noch: Bisher verwende ich

width=\pgfwidth,
height=\pgfheight
mit den vorab eingestellten Werten

\newcommand{\pgfwidth}{.8\linewidth}
\newcommand{\pgfheight}{.6\linewidth}

Nun scheinen sich aber diese Einstellungen mit der "Erweiterung" der x-Achse zu beißen. Wie kann ich dies trotzdem so "hinbasteln", dass das Erscheinungsbild mit meinen anderen Grafiken konform geht?

Viele Grüße

Thomas

Barny.G
03-07-2014, 19:07
Hallo liebe Leute,

kennt denn hier wirklich niemand diesen Fehler - oder besser dessen Lösung? Ich würde gern die Wirkung von

enlarge x limits=1,
auf

width=\pgfwidth,
height=\pgfheight
kennen und damit der Lösung des Größenproblems näher kommen...

Viele Grüße

Thomas

Studi
03-07-2014, 23:02
Hi Thomas,

wenn hier grad keinem was dazu einfällt, kannst Du auch auf TeXwelt.de im Thema pgfplots (http://texwelt.de/wissen/themen/pgfplots/) fragen, da kennen sich einige hervorragend aus. Schneller Eindruck: Plot Beispiele (http://images.google.com/search?tbm=isch&q=pgfplots+site:texwelt.de).

Studi

rstuby
04-07-2014, 08:06
Aber in dem Fall in beiden Foren jeweils den Link zum anderen mit angeben!

esdd
04-07-2014, 14:57
enlarge x limits=1 hat zur Folge, dass der auf der x-Achse angezeigete Datenbereich um 100% nach unten und um 100% nach oben erweitert wird. Es ist in dem Diagramm also links und rechts noch einmal genauso viel Platz frei, wie der Graph selbst breit ist bzw. der Graph nimmt nur noch ein Drittel der für das Diagramm zur Verfügung stehenden Breite ein.

Gruß
Elke