Anzeige:
Ergebnis 1 bis 6 von 6

Thema: pstricks: multiple listplots in psgraph

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.05.2011
    Beiträge
    19

    pstricks: multiple listplots in psgraph

    Hallo,

    ich habe einen Datensatz mit der Variable Jahr und vier abhängigen Variablen und möchte diese in einem Plot innerhalb einer psgraph-Umgebung darstellen (s. Code unten). Die Vorgehensweise habe ich so von bereits anderswo beschriebenen Beispielen übernommen. Komischerweise wird aber nur die dritte abhängige Variable mit den Parametern des 2. Plots abgebildet. Fehlermeldungen kommen keine. Ich habe schon alle möglichen Kombinationen probiert (mit psaxes statt psgraph, mit/ohne PlotNo und PlotNoMax usw.) - leider ohne Erfolg.

    Ein weiteres Problem besteht darin, dass die Darstellung der Daten nach links über das Jahr 1980 hinaus waagrecht bis zum Rand verlängert wird und bei 1997 nach oben!?

    Für Lösungsvorschläge wäre ich sehr dankbar! (Die figure-Umgebung brauche ich für das Einbinden in das Text-Dokument)

    \begin{filecontents*}{test.dat}
    1980 645.46 421.3 946.21 610.42
    1981 640.12 419.6 922.93 595.62
    1982 619.75 403.52 901.07 577.34
    1983 610.04 393.53 930.44 598.01
    1984 591.08 376.23 972.45 634.94
    1985 590.18 377.78 949.75 633.74
    1986 567.88 366.82 876.91 588.49
    1987 547.98 348.35 883.24 593.11
    1988 535.67 340.67 875.85 592.42
    1989 521.17 332.91 854.27 562.44
    1990 510.43 326.92 863.38 560.97
    1991 500.05 316.51 857.58 549.03
    1992 473.08 299.71 886.59 556.39
    1993 472.48 297.08 1062.2 635.85
    1994 451.4 286.05 1156.1 671.97
    1995 442.72 277.7 1065 634.07
    1996 428.31 272.01 991.3 606.46
    1997 412.28 262.82 953.46 597.46
    \end{filecontents*}

    \documentclass[11pt,titlepage, a4paper, oneside]{report}
    \usepackage{pstricks,pstricks-add}
    \begin{document}

    \begin{figure*}[!tp]
    \begin{pspicture}[linewidth=0.5pt](0,0)(80,100)
    \readdata{\data}{test.dat}%
    \psset{xAxisLabel=year,yAxisLabel=[N], xAxisLabelPos={3.5cm,-1cm},xAxisLabelPos={c,-0.39in},yAxisLabelPos={-0.45in,c},llx=-1.5cm,lly=-1.2cm}
    \psgraph[Ox=1980, Dx=5,Dy=100,axesstyle=frame]{->}(1980,0)(1997,1200){8cm}{8cm}%
    \listplot[plotNo=1,plotNoMax=4,showpoints=true,dotstyle=o,pl otstyle=line,linecolor=black,linewidth=1pt]{\data}
    \listplot[plotNo=2,plotNoMax=4,showpoints=true,dotstyle=o,pl otstyle=line,linecolor=black,linewidth=1pt]{\data}
    \listplot[plotNo=3,plotNoMax=4,showpoints=true,dotstyle=x,pl otstyle=line,linecolor=blue,linewidth=1pt]{\data}
    \listplot[plotNo=4,plotNoMax=4,showpoints=true,dotstyle=x,pl otstyle=line,linecolor=red,linewidth=1pt]{\data}
    \endpsgraph
    \end{pspicture}
    \caption[Test]{\textbf{Testgrafik}}
    \end{figure*}

    \end{document}
    Geändert von a_deckert (06-05-2011 um 11:57 Uhr)

  2. #2
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.046
    Zitat Zitat von a_deckert Beitrag anzeigen
    ich habe einen Datensatz mit der Variable Jahr und vier abhängigen Variablen und möchte diese in einem Plot innerhalb einer psgraph-Umgebung darstellen (s. Code unten). Die Vorgehensweise habe ich so von bereits anderswo beschriebenen Beispielen übernommen. Komischerweise wird aber nur die dritte abhängige Variable mit den Parametern des 2. Plots abgebildet. Fehlermeldungen kommen keine. Ich habe schon alle möglichen Kombinationen probiert (mit psaxes statt psgraph, mit/ohne PlotNo und PlotNoMax usw.) - leider ohne Erfolg.
    Du solltest die x-Achse intern von 0..17 gehen lassen und einfach vom
    x-Wert 1980 abziehen.

    Code:
    \begin{filecontents*}{test.dat}
    1980 645.46 421.3 946.21 610.42
    1981 640.12 419.6 922.93 595.62
    1982 619.75 403.52 901.07 577.34
    1983 610.04 393.53 930.44 598.01
    1984 591.08 376.23 972.45 634.94
    1985 590.18 377.78 949.75 633.74
    1986 567.88 366.82 876.91 588.49
    1987 547.98 348.35 883.24 593.11
    1988 535.67 340.67 875.85 592.42
    1989 521.17 332.91 854.27 562.44
    1990 510.43 326.92 863.38 560.97
    1991 500.05 316.51 857.58 549.03
    1992 473.08 299.71 886.59 556.39
    1993 472.48 297.08 1062.2 635.85
    1994 451.4 286.05 1156.1 671.97
    1995 442.72 277.7 1065 634.07
    1996 428.31 272.01 991.3 606.46
    1997 412.28 262.82 953.46 597.46
    \end{filecontents*}
    
    \documentclass[11pt,titlepage, a4paper, oneside]{report}
    \usepackage{pstricks-add}
    \begin{document}
    
    \readdata{\data}{test.dat}%
    \pstScalePoints(1,1){1980 sub}{}
    \psset{xAxisLabel=year,yAxisLabel=[N],     
           xAxisLabelPos={3.5cm,-1cm},xAxisLabelPos={c,-0.39in},
           yAxisLabelPos={-0.45in,c},llx=-1.5cm,lly=-1.2cm}
    \psgraph[Ox=1980, Dx=5,Dy=100,axesstyle=frame,
             tickstyle=inner,ticksize=0 5pt]{->}(0,0)(17,1200){8cm}{8cm}
    \listplot[plotNo=1,plotNoMax=4,showpoints,
      dotstyle=o,plotstyle=line,linecolor=black,linewidth=1pt]{\data}
    \listplot[plotNo=2,plotNoMax=4,showpoints,
      dotstyle=o,plotstyle=line,linecolor=black,linewidth=1pt]{\data}
    \listplot[plotNo=3,plotNoMax=4,showpoints,
      dotstyle=x,plotstyle=line,linecolor=blue,linewidth=1pt]{\data}
    \listplot[plotNo=4,plotNoMax=4,showpoints,
      dotstyle=x,plotstyle=line,linecolor=red,linewidth=1pt]{\data}
    \endpsgraph
    
    \end{document}


    Herbert

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.05.2011
    Beiträge
    19
    Lieber Herbert,

    vielen Dank für Deine Antwort und den Lösungsvorschlag! Bei genauerem Hinsehen habe ich nun allerdings festgestellt, dass das Problem in den Daten liegt, die einiges mehr umfassen als hier im Beispiel dargestellt. Und zwar gibt es 2 Variablen, die ein Jahr früher enden als die übrigen. Sobald man das letzte Jahr entfernt, werden die Graphen einwandfrei dargestellt. Gibt es eine Möglichkeit, fehlende Werte in den Datensatz so aufzunehmen, dass die Darstellung für diese Variablen ein Jahr früher endet (ich habe es mit "." probiert, das brachte allerdings keinen erfolg)?

    Danke und Gruß
    Andreas

  4. #4
    Registrierter Benutzer
    Registriert seit
    05.05.2011
    Beiträge
    19

    Lösungsvorschlag für Graphen unterschiedlicher Länge in einem Plot

    Beispiel: 2 Datenreihen gehen bis 2006, zwei Datenreihen bis 2007
    Problem: Bei einer Darstellung in einem Datensatz führt das zu Fehlern im Plot
    Lösungsvorschlag: den Datensatz in zwei Datensätze aufsplitten, dann einlesen der Daten mit

    \readdata{\data}{test_1.dat}
    \readdata{\dataII}{test_2.dat}

    Vorsicht, beim Plot müssen diese für diese beiden Datensätze in den listplots zwei Zähler für plotNo gesetzt werden und plotNoMax auf 2 begrenzt werden!

    \listplot[plotNo=1,plotNoMax=2]{\data} \listplot[plotNo=2,plotNoMax=2]{\data}
    \listplot[plotNo=1,plotNoMax=2]{\dataII} \listplot[plotNo=2,plotNoMax=2]{\dataII}

  5. #5
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.046
    Zitat Zitat von a_deckert Beitrag anzeigen
    Beispiel: 2 Datenreihen gehen bis 2006, zwei Datenreihen bis 2007
    Problem: Bei einer Darstellung in einem Datensatz führt das zu Fehlern im Plot
    Lösungsvorschlag: den Datensatz in zwei Datensätze aufsplitten, dann einlesen der Daten mit

    \readdata{\data}{test_1.dat}
    \readdata{\dataII}{test_2.dat}

    Vorsicht, beim Plot müssen diese für diese beiden Datensätze in den listplots zwei Zähler für plotNo gesetzt werden und plotNoMax auf 2 begrenzt werden!

    \listplot[plotNo=1,plotNoMax=2]{\data} \listplot[plotNo=2,plotNoMax=2]{\data}
    \listplot[plotNo=1,plotNoMax=2]{\dataII} \listplot[plotNo=2,plotNoMax=2]{\dataII}
    Die fehlenden Werte müssen durch Null oder sonstwas ergänzt werden und dann kannst du folgendes machen (wenn ich es richtig verstanden habe):
    Code:
    \RequirePackage{filecontents}
    \begin{filecontents*}{test.dat}
    1980 645.46 421.3 946.21 610.42
    1981 640.12 419.6 922.93 595.62
    1982 619.75 403.52 901.07 577.34
    1983 610.04 393.53 930.44 598.01
    1984 591.08 376.23 972.45 634.94
    1985 590.18 377.78 949.75 633.74
    1986 567.88 366.82 876.91 588.49
    1987 547.98 348.35 883.24 593.11
    1988 535.67 340.67 875.85 592.42
    1989 521.17 332.91 854.27 562.44
    1990 510.43 326.92 863.38 560.97
    1991 500.05 316.51 857.58 549.03
    1992 473.08 299.71 886.59 556.39
    1993 472.48 297.08 1062.2 635.85
    1994 451.4 286.05 1156.1 671.97
    1995 442.72 277.7 1065 634.07
    1996 428.31 272.01 991.3 606.46
    1997 412.28 262.82 953.46 597.46
    1998 412.28 262.82 953.46 597.46
    1999 412.28 262.82 0 0
    2000 412.28 262.82 0 0
    \end{filecontents*}
    
    \documentclass[11pt,titlepage, a4paper, oneside]{report}
    \usepackage{pstricks-add}
    \begin{document}
    
    \readdata{\data}{test.dat}%
    \pstScalePoints(1,1){1980 sub}{  }
    \psset{xAxisLabel=year,yAxisLabel=[N],     
           xAxisLabelPos={3.5cm,-1cm},xAxisLabelPos={c,-0.39in},
           yAxisLabelPos={-0.45in,c},llx=-1.5cm,lly=-1.2cm}
    \psgraph[Ox=1980, Dx=5,Dy=100,axesstyle=frame,
             tickstyle=inner,ticksize=0 5pt]{->}(0,0)(20,1200){8cm}{8cm}
    \listplot[plotNo=1,plotNoMax=4,showpoints,
      dotstyle=o,plotstyle=line,linecolor=black,linewidth=1pt]{\data}
    \listplot[plotNo=2,plotNoMax=4,showpoints,
      dotstyle=o,plotstyle=line,linecolor=black,linewidth=1pt]{\data}
    \listplot[plotNo=3,plotNoMax=4,showpoints,
      dotstyle=x,plotstyle=line,linecolor=blue,linewidth=1pt,xEnd=1998]{\data}
    \listplot[plotNo=4,plotNoMax=4,showpoints,
      dotstyle=x,plotstyle=line,linecolor=red,linewidth=1pt,xEnd=1998]{\data}
    \endpsgraph
    
    \end{document}
    Herbert

  6. #6
    Registrierter Benutzer
    Registriert seit
    05.05.2011
    Beiträge
    19
    Wunderbar, das funktioniert auch und erscheint mir die elegantere Lösung.
    Danke!

Stichworte

Lesezeichen

Berechtigungen

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