-
pgfplots xmin berechnen
Hi,
ich möchte mittels pgfplots ein Diagramm aus einem Datensatz, der in einer Datei gespeichert ist, zeichnen lassen. Kann ich aus den Daten irgendwie die min/max Werte bekommen, so dass ich mir mein xmin/xmax/ymin/ymax ausrechnen kann? Ich möchte so z.B. vorgeben, dass zu jeder Seite 10% Platz gelassen werden soll...
Das hier habe ich anderswo gefunden, funktioniert aber nicht:
Code:
\documentclass[a4paper,10pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{gnuplottex}
\usepackage{pstricks}
\usepackage{graphicx}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\newcommand{\findmax}[1]{
\pgfplotsforeachungrouped \table in {#1} {%
\pgfplotstablevertcat{\concatenated}{\table}%
}%
\pgfplotstablesort[sort key={1},sort cmp={float >}]{\sorted}{\concatenated}%
\pgfplotstablegetelem{0}{1}\of{\sorted}%
\let\ymax=\pgfplotsretval%
}
\newcommand{\findmin}[1]{
\pgfplotsforeachungrouped \table in {#1} {%
\pgfplotstablevertcat{\concatenated}{\table}%
}%
\pgfplotstablesort[sort key={1},sort cmp={float <}]{\sorted}{\concatenated}%
\pgfplotstablegetelem{0}{1}\of{\sorted}%
\let\ymin=\pgfplotsretval%
}
\begin{document}
\findmax{dataA.dat}
\findmin{dataA.dat}
\begin{tikzpicture}
\begin{axis}
\addplot table[x index=1,y index=7] {dataA.dat};
\end{axis}
\end{tikzpicture}
\end{document}
Ich berechne hier schon gar nichts, weil vorher schon 100 Fehler kommen.
-
hi,
bei 100 fehlern ist meist nur der erste wichtig.
kannst du auch noch einen auszug deiner datendatei bereitstellen?
ich sehe auch, dass du mit gnuplottex, pstricks und pgfplots drei verscheidene plottingprogramme verwendest. bist du gerade am testen oder verwendest du eine wilde mischung aus allen 3?
gruss
-
Hi,
ne ich habe ausprobiert womit ich meine Daten am besten plotten kann. Habe vorher mit pstricks probiert. Stellt mich aber nicht zufrieden. Hatte pgfplots vorher schon einmal ausprobiert und fand es damals auch unzureichend, es hat sich aber anscheinend sehr gut weiter entwickelt. Deshalb will ich es jetzt noch einmal ausprobieren. Datei im Anhang. Die Fehlermeldung lautet: Undefined control sequence \findmax{dataA.dat}
-
hi,
du haettest das orginal verlinken koennen. ich vermute mal den code kommt hier her: http://tex.stackexchange.com/questio...e-with-pgfplot
findmax und findmin durchsuchen immer die zweite spalte der tabelle (sort key=1) und finden dort maximum und minimum. ich glaube was du willst, ist das maximum und minimum von ganz bestimmten spalten, oder?
das macro an sich funktioniert bei mir ohne fehler und ich kann auch die werte ausgeben, eventuell musst du also mal deinen fehler hier mit angeben.
gruss
-
Habe den Fehler gefunden. Es lag wohl an einer veralteten Version von pgfplotstable. Nun funktioniert es, aber ich bekomme die Meldung capacity exceeded. Und ja ich müsste natürlich noch eine bestimmte Spalte dann durchsuchen lassen. Wollte erstmal das Beispiel überhaupt zum Laufen bringen.
-
hi,
memory limit wir schnell erreicht, vor allem mit pdflatex. klar du liest auch mal eben 2x eine tabelle mit 7-8 spalten und 1000 zeilen ein! latex ist kein matlab und sehr langsam bei berechnungen.
ich wuerde mir diese werte anderswo berechnen wenn du sie zwingend haben willst. aber warum gibst du nicht bei enlargelimits einfach einen fixen wert ein und gut ist?
mit lualatex kannst du es immer noch kompilieren, das hat kein memory limit. dauert aber so ca 1-2min auf meinem rechner.
eventuell kannst du anstatt mit sort key={[index]#2} einen spaltenindex auswaehlen
Code:
\newcommand{\findmax}[2]{
\pgfplotsforeachungrouped \table in {#1} {%
\pgfplotstablevertcat{\concatenated}{\table}%
}%
\pgfplotstablesort[sort key={[index]#2},sort cmp={float >}]{\sorted}{\concatenated}%
\pgfplotstablegetelem{0}{1}\of{\sorted}%
\let\ymax=\pgfplotsretval%
}
aufruf dann \findmax{data.dat}{7}.
ausserdem musst du das kommando so abaendern das x und y maximalwerte gefunden werden. also muss das macro 4x ausgefuehrt werden. das duerfte lange lange dauern- zu lange.
daher mein tipp. spar dir diese berechnung und setze enlargelimits global. verwende die externalize library damit deine plots nur 1x und nicht bei jedem kompilieren neu gesetzt werden.
gruss
-
So, für das was ich machen möchte scheint das hier einfach
Code:
\begin{axis}[
enlarge x limits=0.05,
enlarge y limits=0.05,
]
zu funktionieren! Also brauche ich den ganzen Kram vorher gar nicht!
EDIT: Danke bobmalaria, sehe du schlägst das auch vor mit den enlarge limits!