PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pstricks grafiken untereinander erzwingen



a_deckert
09-06-2011, 18:10
Hallo,

ich möchte wie im Beispiel im Anhang mit pspicture und listplot Grafiken von unterschiedlichen Datensätzen direkt untereinander plotten (mit Fließtext außen), so dass die X-Achse nur einmal beschriftet werden muss. Leider werden die Grafiken immer nebeneinander dargestellt. Ich habe es auch schon mit \par zwischen den Grafiken versucht, ohne pspicture, mit Einbinden der Grafiken in eine Tabelle, mit subfigure, mit minipage...nothing works.
Bitte um Tipps, das Problem zu beheben.
Wenn ich versuche das Paket caption zu verwenden, kommt eine Fehlermeldung (no room for new dimension), wenn ich dieses Paket wie anderswo empfohlen ganz am Anfang lade, bekomme ich weitere Schwierigkeiten.

Beispielcode für einen der unzähligen Versuche (hier mit zweimal denselben Daten und zunächst ohne die notwendigen Schönheitskorrekturen an den Achsen):

\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]
\centering
\begin{pspicture}[linewidth=0.5pt](0,0)(80,100)
\readdata{\data}{test.dat} \psset{xAxisLabel=Year,yAxisLabel=[N], xAxisLabelPos={c,-0.39in},yAxisLabelPos={-0.48in,c},llx=-1.5cm,lly=-1.2cm}
\psgraph[Ox=1980, Dx=5,Dy=100,axesstyle=frame,xsubticks=5, ]{->}(1980,0)(2010,1250){8cm}{6cm}
\listplot[plotNo=1,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=2,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=3,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=4,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\endpsgraph
\end{pspicture}
\par
\begin{pspicture}[linewidth=0.5pt](0,0)(80,100)
\readdata{\data}{test.dat}
\psset{xAxisLabel=Year,yAxisLabel=[N], xAxisLabelPos={c,-0.39in},yAxisLabelPos={-0.48in,c},llx=-1.5cm,lly=-1.2cm}
\psgraph[Ox=1980, Dx=5,Dy=100,axesstyle=frame,xsubticks=5, ]{->}(1980,0)(2010,1250){8cm}{6cm}
\listplot[plotNo=1,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=2,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=3,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=4,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\endpsgraph
\end{pspicture}
\caption[test]{\textbf{test}(test)}
\label{fig:test}
\end{figure*}

\end{document}

u_fischer
09-06-2011, 18:16
Wenn ich versuche das Paket caption zu verwenden, kommt eine Fehlermeldung (no room for new dimension),

\usepackage{etex}

Dein anderes Problem verstehe ich nicht. Die Bilder sind doch untereinander.

a_deckert
09-06-2011, 18:30
Stimmt, mit \par kommen sie untereinander, aber ich schaffe es damit nicht, sie direkt aneinander zu kleben (ohne Zwischenraum)...

u_fischer
09-06-2011, 19:06
Probiers mit \\ und evtl. vorher ]\lineskip=0pt

voss
09-06-2011, 19:15
Stimmt, mit \par kommen sie untereinander, aber ich schaffe es damit nicht, sie direkt aneinander zu kleben (ohne Zwischenraum)...

deine pspicture-Umgebung ist völlig überflüssig!



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

\begin{figure*}[!tp]
\centering
\readdata{\data}{test.dat} \psset{xAxisLabel=Year,yAxisLabel=[N], xAxisLabelPos={c,-0.39in},yAxisLabelPos={-0.48in,c},llx=-1.5cm,lly=-1.2cm}
\psgraph[Ox=1980, Dx=5,Dy=100,axesstyle=frame,xsubticks=5, ]{->}(1980,0)(2010,1250){8cm}{6cm}
\listplot[plotNo=1,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=2,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=3,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=4,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\endpsgraph

\readdata{\data}{test.dat}
\psset{xAxisLabel=Year,yAxisLabel=[N], xAxisLabelPos={c,-0.39in},yAxisLabelPos={-0.48in,c},llx=-1.5cm,lly=-1.2cm}
\psgraph[Ox=1980, Dx=5,Dy=100,axesstyle=frame,xsubticks=5, ]{->}(1980,0)(2010,1250){8cm}{6cm}
\listplot[plotNo=1,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=2,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=3,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\listplot[plotNo=4,plotNoMax=4,plotstyle=line,linewidth=1pt]{\data}
\endpsgraph

\caption[test]{\textbf{test}(test)}
\label{fig:test}
\end{figure*}

\end{document}

Herbert

a_deckert
10-06-2011, 08:57
Danke Herbert, aber das hatte ich mir auch schon gedacht und auch schon so wie von Dir vorgeschlagen probiert. Dann erscheint aber beim Ausführen von

latex Test.tex
dvips -o Test-pics.ps Test.dvi
ps2pdf Test-pics.ps Test.pdf
pdflatex Test.tex

die Fehlermeldung:

Runaway argument? \relax \ifvmode \edef \reserved@a {\the \everypar} \ifx \reserved@a \ETC
<to be read again>
\par
l.118 ... ticks=5]{->}(1980,0)(2010,1250){8cm}{6cm}

Sobald ich eine oder zwei pspicture-Umgebungen einbaue, geht es wieder, allerdings eben nicht untereinander.

tral
10-06-2011, 11:33
Hallo,

wieso rufst du latex und später pdflatex auf? Da musst du dich schon entscheiden. Der Code von Herbert geht nur mit latex->dvips->ps2pdf

Christian.

a_deckert
10-06-2011, 11:56
Ich denke die Vorgehensweise ist so korrekt. PdfLatex ist notwendig, um die aus dem Hauptdokument ausgelesenen und in einem separaten PDF abgelegten Grafiken wieder in das Hauptdokument einzubinden. Die Vorgehensweise ist auch genauso hier beschrieben und funktioniert bei allen anderen in Latex erstellten Grafiken einwandfrei:
http://tug.org/PSTricks/main.cgi?file=pdf/pdfoutput
(Abschnitt "Package pst-pdf")

Wenn ich das Batch-File schrittweise ablaufen lasse, entsteht der Fehler schon bei der Befehlszeile "latex Test.tex", unabhängig was danach kommt.

tral
10-06-2011, 12:03
Herberts Code (Post #5) geht bei mir problemlos. Du musst also irgendwas geändert haben. Erstelle ein Minimalbeispiel, dass den Fehler aus Post #6 zeigt...

Christian.

a_deckert
10-06-2011, 12:04
Da die oben beschrieben Vorgehensweise der Compilierung von Grafiken mit nachträglichem Einbinden in das Hauptdokument anscheinend nur mit der pspicture-Umgebung funktioniert, habe ich beide psgraph-Grafiken in eine einzige pspicture-Umgebung eingebunden. Dann erscheinen die Grafiken untereinander, aber mit einem großen Abstand zwischen beiden. Ich hätte sie gerne direkt aneinander gehängt...

a_deckert
10-06-2011, 12:22
Herberts Code geht bei mir auch problemlos, wenn ich ihn als Einzeldokument behandle. Sobald ich ihn aber mit copy&paste in mein Projekt einbinde, geht es nicht mehr. Ich vermute mal, dass da irgendein Konflikt mit einem der anderen Pakete auftritt...

a_deckert
21-06-2011, 12:30
Die pspicture-Umgebung wird definitiv benötigt, siehe oben. Ich habe nun innerhalb der pspicture-Umgebung psmatrix verwendet und dort dann die Grafiken (hier im Beispiel dreimal mit denselben Daten) in drei Knoten platziert.

\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]
\centering
\begin{pspicture}[linewidth=0.5pt](0,0)(40,200)
\psmatrix[colsep=0mm,rowsep=-14.4mm]
\lineskip=0pt
\rnode[c]{A}{
\readdata{\data}{test.dat}
\psset{yAxisLabel=[N],xAxisLabel=,ticks=y, yAxisLabelPos={-0.52in,c},llx=-1.5cm,lly=-1.4cm}
\psgraph[Ox=1980, Dx=5,Dy=100,axesstyle=frame,xsubticks=5, showorigin=false ]{->}(1980,0)(2010,1250){8cm}{6cm}
\listplot[plotNo=1, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\listplot[plotNo=2, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\listplot[plotNo=3, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\listplot[plotNo=4, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\endpsgraph }\\
\rnode[c]{B}{
\readdata{\data}{test.dat}
\psset{yAxisLabel=,xAxisLabel=, ticks=y,llx=-1.5cm,lly=-1.4cm}
\psgraph[Ox=1980, Dx=5,Dy=100,axesstyle=frame,xsubticks=5, showorigin=false ]{->}(1980,0)(2010,1250){8cm}{6cm}
\listplot[plotNo=1, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\listplot[plotNo=2, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\listplot[plotNo=3, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\listplot[plotNo=4, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\endpsgraph }\\
\rnode[c]{C}{
\readdata{\data}{test.dat}
\psset{xAxisLabel=Year,yAxisLabel=, xAxisLabelPos={c,-0.39in},llx=-1.5cm,lly=-1.4cm}
\psgraph[Ox=1980, Dx=5,Dy=100,axesstyle=frame,xsubticks=5]{->}(1980,0)(2010,1250){8cm}{6cm}
\listplot[plotNo=1, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\listplot[plotNo=2, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\listplot[plotNo=3, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\listplot[plotNo=4, plotNoMax=4, linewidth=1pt, showpoints]{\data}
\endpsgraph}
\endpsmatrix
\end{pspicture}
\caption[test]{\textbf{test}(test)}
\label{fig:test}
\end{figure*}

a_deckert
21-06-2011, 13:53
Damit obenstehender Code alleinstehend fehlerfrei funktioniert und mit

latex Test.tex
dvips -o Test-pics.ps Test.dvi
ps2pdf Test-pics.ps Test.pdf
pdflatex Test.tex

umgesetzt werden kann, müssen folgende Packages eingebunden werden:

\usepackage{pstricks,pstricks-add}
\usepackage{pst-pdf}
\psset{unit=1mm}

...und am Ende fehlt

\end{document}