PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : subfigure, pstricks und ein paar Fragen



Elgerton
26-02-2009, 10:50
Hallo,

ich möchte vier Graphen mit pstricks in einer subfigure-Umgebung plotten. Die Daten werden dabei aus Dateien ausgelesen. Das funktioniert auch soweit, allerdings hätte ich noch ein paar Fragen dazu und hoffe, dass Ihr mir helfen könnt.

Wenn ihr das unten angehängte Beispiel ausführt, dann werdet Ihr sehen, dass bei fast allen Plots die oberste Beschriftung bei der y-Achse fehlt. Wie bekomme ich die da hin?

Weiterhin ist der erste Plot (links oben) höher als der Plot rechts daneben. Wenn ich den Plotbereich der y-Achse im linken Plot auf 0.4 erweitere, dann sind sie ungefähr gleich groß. Warum wird die vorgegebene Höhe (3cm) nicht eingehalten?

Gibt es eine Möglichkeit, außer mit \rput einen Titel für die Plots zu bestimmen?

Kann man Anfang und Ende der x-Achsenwerte direct aus den eingelesenen Daten bekommen, so dass man Ox nicht manuell setzen muss?

Vielen Dank für Eure Mühe.

Hier ist nun das "Minimalbeispiel" (die Daten fürs plotten hängen als Attachment dran):



\documentclass[a4paper,12pt,headings=normal]{scrbook}

\usepackage{pstricks-add}
\usepackage{subfigure}

\begin{document}

\begin{figure}[ht]
\centering
\footnotesize
\readdata{\dataMag}{mag.txt}%
\readdata{\dataPha}{pha.txt}%
\readdata{\dataRe}{re.txt}%
\readdata{\dataIm}{im.txt}%
%\pstScalePoints(1,1){8 sub}{}
\psset{llx=-0.5cm,lly=-1cm, xAxisLabel={Frequenz / GHz}, xAxisLabelPos={c,-0.9cm}}
\subfigure
{
\psset{yAxisLabel={$|\mathrm{S}|$}, yAxisLabelPos={-0.5in,c}}
\psline[linecolor=red,linewidth=1.0pt](4.5,3.9)(5.5,3.9)
\rput(6.0,3.9){Set 1}
\psline[linecolor=blue,linestyle=dashed,linewidth=1.0pt](4.5,3.5)(5.5,3.5)
\rput(6.0,3.5){Set 2}
\psgraph[axesstyle=frame,Dx=0.5,Dy=0.1,Ox=8,Oy=0,subticks=1](8,0)(10,0.3){6cm}{3cm}%
\listplot[linecolor=red,linewidth=1.0pt,plotNo=1,plotNoMax=2]{\dataMag}
\listplot[linecolor=blue,linestyle=dashed,linewidth=1.0pt,pl otNo=2,plotNoMax=2]{\dataMag}
\endpsgraph
}
\hfill
\subfigure
{
\psset{yAxisLabel={$\arg(\mathrm{S})$ / degree}, yAxisLabelPos={-0.5in,c}}
\psgraph[axesstyle=frame,Dx=0.5,Dy=50,Ox=8,Oy=-100,subticks=1](8,-100)(10,100){6cm}{3cm}%
\listplot[linecolor=red,linewidth=1.0pt,plotNo=1,plotNoMax=2]{\dataPha}
\listplot[linecolor=blue,linestyle=dashed,linewidth=1.0pt,pl otNo=2,plotNoMax=2]{\dataPha}
\endpsgraph
}
\subfigure
{
\psset{yAxisLabel={$\Re(\mathrm{S})$}, yAxisLabelPos={-0.5in,c}}
\psgraph[axesstyle=frame,Dx=0.5,Dy=0.1,Ox=8,Oy=-0.1,subticks=1](8,-0.1)(10,0.3){6cm}{3cm}%
\listplot[linecolor=red,linewidth=1.0pt,plotNo=1,plotNoMax=2]{\dataRe}
\listplot[linecolor=blue,linestyle=dashed,linewidth=1.0pt,pl otNo=2,plotNoMax=2]{\dataRe}
\endpsgraph
}
\hfill
\subfigure
{
\psset{yAxisLabel={$\Im(\mathrm{S})$}, yAxisLabelPos={-0.5in,c}}
\psgraph[axesstyle=frame,Dx=0.5,Dy=0.1,Ox=8,Oy=-0.1,subticks=1](8,-0.1)(10,0.3){6cm}{3cm}%
\listplot[linecolor=red,linewidth=1.0pt,plotNo=1,plotNoMax=2]{\dataIm}
\listplot[linecolor=blue,linestyle=dashed,linewidth=1.0pt,pl otNo=2,plotNoMax=2]{\dataIm}
\endpsgraph
}
\caption{Beispiel}
\end{figure}

\end{document}

Elgerton
02-03-2009, 15:23
Ist das tatsächlich unmöglich oder vielleicht ein Bug im pstricks-Package?

localghost
02-03-2009, 16:45
[…] Gibt es eine Möglichkeit, außer mit \rput einen Titel für die Plots zu bestimmen? […]
Dafür ist ja gerade subfigure (http://ctan.org/pkg/subfigure) gedacht. Du solltest allerdings besser subfig (http://ctan.org/pkg/subfig) oder (noch besser) subcaption aus caption (http://ctan.org/pkg/caption) benutzen. Mit subfig (http://ctan.org/pkg/subfig) wären jedoch nicht so viel Änderungen nötig.

\begin{figure}[!ht]
\centering
\subfloat[Beschreibung\label{subfig-1:beispiel}]{%
% Inhalt
}
\subfloat[Beschreibung\label{subfig-2:beispiel}]{%
% Inhalt
}
\caption{fig:beispiel}\label{fig:beispiel}
\end{figure}
Du müsstest also nur \subfigure durch \subfloat ersetzen und die Beschreibung als optionales Argument hinzufügen.


MfG
Thorsten¹

Elgerton
02-03-2009, 16:50
@localghost: Danke für die Antwort. Das mit der Beschriftung der subfigures ist ein Weg, aber leider wird dadurch der Text unterhalb der Plots gesetzt. Was ich meinte sind Titel für die Plots, die oberhhalb der Plots lokalisiert sind. Gibt es dafür etwas?

localghost
02-03-2009, 17:03
Mit subcaption kannst Du die Beschreibungen (glaube ich) auch über die Bilder setzen. Da musst Du allerdings mal selbst in der Anleitung suchen. Die findest Du entweder unter dem Eintrag von caption (http://ctan.org/pkg/caption) auf CTAN oder auf deinem Rechner über die Eingabeaufforderung (sofern das Paket installiert ist).

texdoc subcaption

voss
02-03-2009, 20:46
Wenn ihr das unten angehängte Beispiel ausführt, dann werdet Ihr sehen, dass bei fast allen Plots die oberste Beschriftung bei der y-Achse fehlt. Wie bekomme ich die da hin?

Weiterhin ist der erste Plot (links oben) höher als der Plot rechts daneben. Wenn ich den Plotbereich der y-Achse im linken Plot auf 0.4 erweitere, dann sind sie ungefähr gleich groß. Warum wird die vorgegebene Höhe (3cm) nicht eingehalten?


da ist irgendwas faul. Sehe es mir morgen genauer an.

http://voss.homedns.org/PSTricks/pstricks-add/index.phtml
dort gibt es eine neue Version mit einer korrigierten Division für die Berechnung
des Maßstabes.

Selbiges ist dann auch heute oder morgen über CTAN möglich.

Herbert

voss
03-03-2009, 13:29
Ist das tatsächlich unmöglich oder vielleicht ein Bug im pstricks-Package?

siehe oben den Link

Herbert

Elgerton
03-03-2009, 13:46
Ja super! Jetzt stimmts! Zumindest die Höhe :) Die oberste Beschriftung der y-Achse ist allerdings noch nicht immer da.

Hat jemand eventuell noch Anmerkungen zur automatischen Bestimmung der x-Achsenwerte aus denen mit \readdata eingelesen Datenwerte?

voss
03-03-2009, 14:07
Ja super! Jetzt stimmts! Zumindest die Höhe :) Die oberste Beschriftung der y-Achse ist allerdings noch nicht immer da.

Hat jemand eventuell noch Anmerkungen zur automatischen Bestimmung der x-Achsenwerte aus denen mit \readdata eingelesen Datenwerte?

das geht prinzipiell nicht, da die Achsenbeschriftungen auf TeX- und
die Kurven auf PostScript-Ebene erstellt werden! TeX weiß nichts von
dem, was auf der PS-Ebene mal erfolgt.

Die oberste y-Achsenmarkierung fehlt standardmäßig, wenn dort ein Tick
erscheint. Du kannst einfach (10,0.301) als Koordinatenpaar nehmen, dann
gibt es den Wert, ohne dass man einen Unterschied sieht.

Herbert

Elgerton
03-03-2009, 14:11
Danke. Das mit dem kleinen Offset funktioniert!

sommerfee
03-03-2009, 17:40
Du solltest allerdings besser subfig (http://ctan.org/pkg/subfig) oder (noch besser) subcaption aus caption (http://ctan.org/pkg/caption) benutzen. Mit subfig (http://ctan.org/pkg/subfig) wären jedoch nicht so viel Änderungen nötig.

Jein, auch das subcaption-Paket kennt den Befehl \subfloat. Da er jedoch bzgl. Abstände und einigen anderen Kleinigkeiten nicht 100% kompatibel zu dem \subfloat aus dem subfig-Paket ist, habe ich bisher von einer Dokumentation abgesehen.

Liebe Grüße,
Axel

localghost
03-03-2009, 18:16
Jein, auch das subcaption-Paket kennt den Befehl \subfloat. Da er jedoch bzgl. Abstände und einigen anderen Kleinigkeiten nicht 100% kompatibel zu dem \subfloat aus dem subfig-Paket ist, habe ich bisher von einer Dokumentation abgesehen. […]
An dieser Stelle muss ich dir mal attestieren, dass Du immer für Überraschungen gut bist. Auch wenn das hier noch nicht ganz ausgereift ist. Ich habe da auch noch eine Idee für caption (http://ctan.org/pkg/caption), aber das schreibe ich dir auf anderem Weg.

Elgerton
25-03-2009, 13:31
Hilfe...
Nach dem neuesten Update von pstricks-add bekomme ich nun einen
"! Arithmetic overflow." Feher!

Der war nach dem Update vom 3.3. nicht da.
Herbert, kannst Du mal danach schauen? Danke!

voss
25-03-2009, 14:09
Hilfe...
Nach dem neuesten Update von pstricks-add bekomme ich nun einen
"! Arithmetic overflow." Feher!

Der war nach dem Update vom 3.3. nicht da.
Herbert, kannst Du mal danach schauen? Danke!

mit welchem Beispiel?

Herbert

Elgerton
25-03-2009, 14:11
mit welchem Beispiel?

Dasselbe, was ganz oben angegeben ist.

voss
25-03-2009, 14:51
Dasselbe, was ganz oben angegeben ist.

ich muss den ganzen Kram mal neu schreiben, so ist das alles ziemlich
unbefriedigend ...

Hier erstmal eine Lösung:


\psgraph[axesstyle=frame,Dx=0.5,Dy=0.1,dy=1,
Ox=8,subticks=1](8,0)(10,3){6cm}{3cm}%
\listplot[yunit=10,linecolor=red,linewidth=1.0pt,
plotNo=1,plotNoMax=2]{\dataMag}
\listplot[yunit=10,linecolor=blue,linestyle=dashed,
linewidth=1.0pt,plotNo=2,plotNoMax=2]{\dataMag}
\endpsgraph


Im Moment fällt mir nichts besseres ein, was längerfristig hält ... :rolleyes:
Das Problem ist die y-Einteilung 0...0,3
Nimm einfach 0...3 und dann Dy=0.1,dy=1 dann stimmt die EInteilung und
yunit=10 bei \listplot, dann stimmt der Plot

Herbert

voss
25-03-2009, 19:19
ich muss den ganzen Kram mal neu schreiben, so ist das alles ziemlich unbefriedigend ...


geschehen:

http://voss.homedns.org/PSTricks/pstricks-add/

du brauchst die Dateien pstricks-add.tex und pst-fp.tex
Letztere ist neu und übernimmt nun die Division. Nicht vergessen: Datenbank
aktualisieren.

Herbert

Elgerton
26-03-2009, 07:51
Super danke. Hier funktioniert es jetzt wieder. :D