PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pstricks: multiple listplots in psgraph



a_deckert
06-05-2011, 11:49
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}

voss
07-05-2011, 08:31
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.


\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,linewidt h=1pt]{\data}
\listplot[plotNo=2,plotNoMax=4,showpoints,
dotstyle=o,plotstyle=line,linecolor=black,linewidt h=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}


http://archiv.dante.de/~herbert/Bildschirmfoto.png

Herbert

a_deckert
09-05-2011, 17:11
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

a_deckert
09-05-2011, 19:24
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}

voss
09-05-2011, 22:17
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):

\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,linewidt h=1pt]{\data}
\listplot[plotNo=2,plotNoMax=4,showpoints,
dotstyle=o,plotstyle=line,linecolor=black,linewidt h=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

a_deckert
10-05-2011, 08:59
Wunderbar, das funktioniert auch und erscheint mir die elegantere Lösung.
Danke!