Anzeige:
Ergebnis 1 bis 7 von 7

Thema: pgfplots xmin berechnen

  1. #1
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146

    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.

  2. #2
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    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
    Mein Ball ist umgefallen

  3. #3
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    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}

  4. #4
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    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
    Geändert von bobmalaria (01-02-2013 um 13:24 Uhr)
    Mein Ball ist umgefallen

  5. #5
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    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.

  6. #6
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    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
    Mein Ball ist umgefallen

  7. #7
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    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!

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •