PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PSTricks \grid



DaPhil
30-11-2010, 14:01
Hallo!


\documentclass[12pt,a4paper]{article}
\usepackage[applemac]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{graphicx}
\usepackage{pst-all}
\usepackage{pstricks-add}
\usepackage{auto-pst-pdf}

\begin{document}

\begin{figure}
\centering
\begin{postscript}
\def\xlength{8}
\def\ylength{6}

\def\xmin{220}
\def\xmax{320}
\def\ymin{0}
\def\ymax{3}

\def\myDx{20}
\def\myDy{1}

\pstFPsub\myxunit{\xmax}{\xmin}
\pstFPdiv\myxunit{\xlength}{\myxunit}
\pstFPmul\myxunit{\myxunit}{\myDx}
\pstFPsub\myyunit{\ymax}{\ymin}
\pstFPdiv\myyunit{\ylength}{\myyunit}
\pstFPmul\myyunit{\myyunit}{\myDy}
\pstFPdiv\gridxmin{\xmin}{\myDx}
\pstFPdiv\gridxmax{\xmax}{\myDx}
\pstFPdiv\gridymin{\ymin}{\myDy}
\pstFPdiv\gridymax{\ymax}{\myDy}

\psset{
xAxisLabelPos={c,-0.9cm},
yAxisLabelPos={-1.2cm,c},
xAxisLabel=Wellenlänge/nm,
yAxisLabel=Absorption/arb. units
}

\pslegend[lt](10,10){
~~\psline[linecolor=black](-2,0.04)(2,0.04)~~&\scriptsize{dsDNA} \\
~~\psline[linecolor=black,linestyle=dashed](-2,0.04)(2,0.04)~~&\scriptsize{ssDNA}
}

\begin{psgraph}[
axesstyle=frame,
comma=true,
Dx=\myDx,
Dy=\myDy,
Ox=\xmin,
Oy=\ymin,
showorigin=true,
linewidth=1pt,
ticks=all,
tickstyle=inner,
ysubticks=5,
xsubticks=5,
xticksize=5pt,
yticksize=5pt,
subticksize=0.5,
tickwidth=1pt,
linecap=1,
linejoin=0,
subtickcolor=black,
subtickwidth=1pt,
labels=all
](\xmin,\ymin)(\xmax,\ymax){\xlength cm}{\ylength cm}

\psgrid[
xunit=\myxunit cm,
yunit=\myyunit cm,
griddots=20,
subgriddiv=0,
gridlabels=0pt,
gridwidth=0.5pt,
gridcolor=black
](\gridxmin,\gridymin)(\gridxmax,\gridymax)
\end{psgraph}
\end{postscript}
\end{figure}
\end{document}

Das grid wird nun über den Rand des Graphen hinausgezeichnet. Gibt es eine Möglichkeit das zu unterbinden?

voss
30-11-2010, 14:25
Das grid wird nun über den Rand des Graphen hinausgezeichnet. Gibt es eine Möglichkeit das zu unterbinden?

kann ich nicht sehen, obwohl ein grid grundsätzliche nur ganzzahlige Werte
haben kann. Man könnte aber nebenbei auch die gepunktete Linie durch
dash=... erstellen:

\documentclass[12pt,a4paper]{article}
\usepackage{pstricks-add}
\usepackage{auto-pst-pdf}

\begin{document}

\begin{postscript}
\psset{
xAxisLabelPos={c,-0.9cm},
yAxisLabelPos={-1.2cm,c},
xAxisLabel=Wellenlänge/nm,
yAxisLabel=Absorption/arb. units
}

\pslegend[lt](10,10){
~~\psline[linecolor=black](-2,0.04)(2,0.04)~~&\scriptsize{dsDNA} \\
~~\psline[linecolor=black,linestyle=dashed](-2,0.04)(2,0.04)~~&\scriptsize{ssDNA}
}
\begin{psgraph}[
axesstyle=frame,
comma=true,
Dx=20,
Dy=1,
showorigin=true,
linewidth=1pt,
ticks=all,
tickstyle=inner,
ysubticks=5,
xsubticks=5,
xticksize=5pt,
yticksize=5pt,
subticksize=0.5,
tickwidth=1pt,
linecap=1,
linejoin=0,
subtickcolor=black,
subtickwidth=1pt,
labels=all
](220,0)(320,3){8cm}{6cm}
\psaxes[axesstyle=frame,labels=none,xticksize=0.5pt 6cm,yticksize=0.5pt 8cm,Dx=20,
ticklinestyle=dashed,linecap=1,dash=0.25pt 5pt, linewidth=1pt](220,0)(320,3)
\end{psgraph}
\end{postscript}

\end{document}

Herbert

DaPhil
30-11-2010, 14:38
Wie es bei mir aussieht habe ich angehängt. Kann man das grid nicht "abschneiden" wenn es über den Rand geht?

voss
30-11-2010, 16:11
Wie es bei mir aussieht habe ich angehängt. Kann man das grid nicht "abschneiden" wenn es über den Rand geht?

dann musst du clippen ... entweder mit pspicture* oder \psclip
Nebenbei kann ich nun wirklich keinen Unterscheid sehen zu deinem
Grid und meinem Beispiel oben mit dash=...

Herbert

DaPhil
30-11-2010, 16:49
Jetzt verschiebt sich leider das grid, und wenn ich Daten plotte auch diese um einen offset.


\documentclass[12pt,a4paper]{article}
\usepackage[applemac]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{graphicx}
\usepackage{pst-all}
\usepackage{pstricks-add}
\usepackage{auto-pst-pdf}

\begin{document}

\begin{figure}
\centering
\begin{postscript}
\def\xlength{8}
\def\ylength{6}

\def\xmin{220}
\def\xmax{330}
\def\ymin{0}
\def\ymax{3}

\def\myDx{20}
\def\myDy{1}

\pstFPsub\myxunit{\xmax}{\xmin}
\pstFPdiv\myxunit{\xlength}{\myxunit}
\pstFPmul\myxunit{\myxunit}{\myDx}
\pstFPsub\myyunit{\ymax}{\ymin}
\pstFPdiv\myyunit{\ylength}{\myyunit}
\pstFPmul\myyunit{\myyunit}{\myDy}
\pstFPdiv\gridxmin{\xmin}{\myDx}
\pstFPdiv\gridxmax{\xmax}{\myDx}
\pstFPdiv\gridymin{\ymin}{\myDy}
\pstFPdiv\gridymax{\ymax}{\myDy}

\psset{
xAxisLabelPos={c,-0.9cm},
yAxisLabelPos={-1.2cm,c},
xAxisLabel=Wellenlänge/nm,
yAxisLabel=Absorption/arb. units
}

\pslegend[lt](10,10){
~~\psline[linecolor=black](-2,0.04)(2,0.04)~~&\scriptsize{dsDNA} \\
~~\psline[linecolor=black,linestyle=dashed](-2,0.04)(2,0.04)~~&\scriptsize{ssDNA}
}

\begin{psgraph}[
axesstyle=frame,
comma=true,
Dx=\myDx,
Dy=\myDy,
Ox=\xmin,
Oy=\ymin,
showorigin=true,
linewidth=1pt,
ticks=all,
tickstyle=inner,
ysubticks=5,
xsubticks=5,
xticksize=5pt,
yticksize=5pt,
subticksize=0.5,
tickwidth=1pt,
linecap=1,
linejoin=0,
subtickcolor=black,
subtickwidth=1pt,
labels=all
](\xmin,\ymin)(\xmax,\ymax){\xlength cm}{\ylength cm}

\psclip{\psline[linestyle=none](\xmin,\ymin)(\xmax,\ymin)(\xmax,\ymax)(\xmin,\yma x)(\xmin,\ymin)}
\psgrid[
xunit=\myxunit cm,
yunit=\myyunit cm,
griddots=20,
subgriddiv=0,
gridlabels=0pt,
gridwidth=0.5pt,
gridcolor=black
](\gridxmin,\gridymin)(\gridxmax,\gridymax)
\endpsclip
\end{psgraph}
\end{postscript}
\end{figure}
\end{document}

voss
30-11-2010, 17:50
Jetzt verschiebt sich leider das grid, und wenn ich Daten plotte auch diese um einen offset.


\documentclass[12pt,a4paper]{article}
\usepackage[applemac]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{graphicx}
\usepackage{pst-all}
\usepackage{pstricks-add}
\usepackage{auto-pst-pdf}

\begin{document}

\begin{figure}
\centering
\begin{postscript}
\def\xlength{8}
\def\ylength{6}

\def\xmin{220}
\def\xmax{330}
\def\ymin{0}
\def\ymax{3}

\def\myDx{20}
\def\myDy{1}

\pstFPsub\myxunit{\xmax}{\xmin}
\pstFPdiv\myxunit{\xlength}{\myxunit}
\pstFPmul\myxunit{\myxunit}{\myDx}
\pstFPsub\myyunit{\ymax}{\ymin}
\pstFPdiv\myyunit{\ylength}{\myyunit}
\pstFPmul\myyunit{\myyunit}{\myDy}
\pstFPdiv\gridxmin{\xmin}{\myDx}
\pstFPdiv\gridxmax{\xmax}{\myDx}
\pstFPdiv\gridymin{\ymin}{\myDy}
\pstFPdiv\gridymax{\ymax}{\myDy}

\psset{
xAxisLabelPos={c,-0.9cm},
yAxisLabelPos={-1.2cm,c},
xAxisLabel=Wellenlänge/nm,
yAxisLabel=Absorption/arb. units
}

\pslegend[lt](10,10){
~~\psline[linecolor=black](-2,0.04)(2,0.04)~~&\scriptsize{dsDNA} \\
~~\psline[linecolor=black,linestyle=dashed](-2,0.04)(2,0.04)~~&\scriptsize{ssDNA}
}

\begin{psgraph}[
axesstyle=frame,
comma=true,
Dx=\myDx,
Dy=\myDy,
Ox=\xmin,
Oy=\ymin,
showorigin=true,
linewidth=1pt,
ticks=all,
tickstyle=inner,
ysubticks=5,
xsubticks=5,
xticksize=5pt,
yticksize=5pt,
subticksize=0.5,
tickwidth=1pt,
linecap=1,
linejoin=0,
subtickcolor=black,
subtickwidth=1pt,
labels=all
](\xmin,\ymin)(\xmax,\ymax){\xlength cm}{\ylength cm}% !!!!!!

\psclip{\psline[linestyle=none](\xmin,\ymin)(\xmax,\ymin)(\xmax,\ymax)(\xmin,\yma x)(\xmin,\ymin)}
\psgrid[
xunit=\myxunit cm,
yunit=\myyunit cm,
griddots=20,
subgriddiv=0,
gridlabels=0pt,
gridwidth=0.5pt,
gridcolor=black
](\gridxmin,\gridymin)(\gridxmax,\gridymax)
\endpsclip
\end{psgraph}
\end{postscript}
\end{figure}
\end{document}


siehe oben in Rot ...

Herbert

DaPhil
30-11-2010, 18:20
Tschuldigung, ich finde meinen Fehler nicht... Kannst du mir noch einen Tip geben?

voss
30-11-2010, 18:29
Tschuldigung, ich finde meinen Fehler nicht... Kannst du mir noch einen Tip geben?

ich habe es doch in deinem Code extra Rot markiert, dass dort ein %-Zeichen
hin muss.

Herbert

DaPhil
30-11-2010, 20:36
Ach so, ich dachte in dieser Zeile liegt der Fehler... Lag er dann ja auch. Darf man fragen was das % bewirkt? Und lässt sich das grid auch über den frame zeichnen? Denn wenn ich nun eine andere Farbe angebe für das grid, so sieht man das grid auf dem frame. Der frame sollte aber darüber liegen...

voss
30-11-2010, 20:51
Ach so, ich dachte in dieser Zeile liegt der Fehler... Lag er dann ja auch. Darf man fragen was das % bewirkt? Und lässt sich das grid auch über den frame zeichnen? Denn wenn ich nun eine andere Farbe angebe für das grid, so sieht man das grid auf dem frame. Der frame sollte aber darüber liegen...

geht alles, macht aber Arbeit ... und lohnt nicht, da der Vorteil gegenüber,
dem, was ich dir schon zeigte, mehr als gering ist.

Durch das fehlende % entsteht ein Leerzeichen, wie bei jedem Zeilenumbruch
in TeX. Die sollten innerhalb von psgraph eigentlich beseitigt werden, aber
machmal gibt es Kombinationen, wo es dann doch wieder da ist.

Herbert

DaPhil
01-12-2010, 08:52
Und so rein theoretisch, wo/wie müsste man sich Arbeit machen?

voss
01-12-2010, 08:55
Und so rein theoretisch, wo/wie müsste man sich Arbeit machen?

man kopiert sich psgraph zu PSGraph, erstellt darin das Grid und
macht dann weiter, wie im originalen psgraph.

Herbert

DaPhil
01-12-2010, 10:19
So funktioniert es leider nicht:


\documentclass[12pt,a4paper]{article}
\usepackage[applemac]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{graphicx}
\usepackage{pst-all}
\usepackage{pstricks-add}
\usepackage{auto-pst-pdf}

\begin{document}

\begin{figure}
\centering
\begin{postscript}
\def\xlength{10}
\def\ylength{8}

\def\xmin{220}
\def\xmax{330}
\def\ymin{0}
\def\ymax{3}

\def\myDx{20}
\def\myDy{1}

\pstFPsub\myxunit{\xmax}{\xmin}
\pstFPdiv\myxunit{\xlength}{\myxunit}
\pstFPmul\myxunit{\myxunit}{\myDx}
\pstFPsub\myyunit{\ymax}{\ymin}
\pstFPdiv\myyunit{\ylength}{\myyunit}
\pstFPmul\myyunit{\myyunit}{\myDy}
\pstFPdiv\gridxmin{\xmin}{\myDx}
\pstFPdiv\gridxmax{\xmax}{\myDx}
\pstFPdiv\gridymin{\ymin}{\myDy}
\pstFPdiv\gridymax{\ymax}{\myDy}

\psset{
xAxisLabelPos={c,-0.9cm},
yAxisLabelPos={-1.2cm,c},
xAxisLabel=Wellenlänge/nm,
yAxisLabel=Absorption/arb. units
}

\pslegend[lt](10,10){
~~\psline[linecolor=black](-2,0.04)(2,0.04)~~&\scriptsize{dsDNA} \\
~~\psline[linecolor=black,linestyle=dashed](-2,0.04)(2,0.04)~~&\scriptsize{ssDNA}
}

\begin{PSGraph}[
axesstyle=none
](\xmin,\ymin)(\xmax,\ymax){\xlength cm}{\ylength cm}%

\psclip{\psline[linestyle=none](\xmin,\ymin)(\xmax,\ymin)(\xmax,\ymax)(\xmin,\yma x)(\xmin,\ymin)}
\psgrid[
xunit=\myxunit cm,
yunit=\myyunit cm,
griddots=20,
subgriddiv=0,
gridlabels=0pt,
gridwidth=0.5pt,
gridcolor=black
](\gridxmin,\gridymin)(\gridxmax,\gridymax)
\endpsclip
\end{PSGraph}

\begin{psgraph}[
axesstyle=frame,
comma=true,
%ylogBase=10,
%logLines=y,
Dx=\myDx,
Dy=\myDy,
Ox=\xmin,
Oy=\ymin,
showorigin=true,
linewidth=1pt,
ticks=all,
tickstyle=inner,
ysubticks=5,
xsubticks=2,
xticksize=5pt,
yticksize=5pt,
subticksize=0.5,
tickwidth=1pt,
linecap=1,
linejoin=0,
subtickcolor=black,
subtickwidth=1pt,
labels=all
](\xmin,\ymin)(\xmax,\ymax){\xlength cm}{\ylength cm}%

\end{psgraph}
\end{postscript}
\end{figure}
\end{document}

voss
01-12-2010, 10:57
So funktioniert es leider nicht:


mit kopieren war gemeint, dass du dir aus pst-plot die Definition von
\def\psgraph{\pst@object{psgraph}}
und
\def\psgraph@i{...}
kopierst, also erst einmal die Umgebung PSGraph definierst, denn die
existiert doch noch gar nicht.

Herbert

DaPhil
01-12-2010, 16:36
Ich habe nun sämtliche \def\psgraph kopiert und in darin PSGraph eingesetzt. \pslegend und \psset habe ich unter \PSGraph gemacht, um darin keine Legende zu erhalten. Mein Ergebnis ist im Anhang. Was mache ich falsch?

voss
02-12-2010, 09:36
Ich habe nun sämtliche \def\psgraph kopiert und in darin PSGraph eingesetzt. \pslegend und \psset habe ich unter \PSGraph gemacht, um darin keine Legende zu erhalten. Mein Ergebnis ist im Anhang. Was mache ich falsch?

mache es so:


...
\usepackage{pst-plot}
\makeatletter
\def\psgraph@v(#1,#2)(#3,#4)(#5,#6)#7#8{% with special origin
% Xorig | yorig | minX | minY | maxX | maxY | Length x-axis | length y-axis%
\pst@killglue%
\begingroup%
\pstFPsub\pst@tempA{#5}{#3}%
\pst@dimm=#7%
\pst@dimo=\pst@tempA pt%
\pstFPdiv\pst@@dx{\strip@pt\pst@dimm}\pst@tempA%
\pst@xunit=\pst@@dx\p@%
%
\ifx!#8\let\pst@yunit=\pst@xunit\else
\pst@dimm=#8%
\pstFPsub\pst@tempA{#6}{#4}%
\pstFPdiv\pst@@dy{\strip@pt\pst@dimm}\pst@tempA%
\pst@yunit=\pst@@dy\p@%
\fi%
%
\pst@dima=#3\pst@xunit \advance\pst@dima by \psk@llx%
\pst@dimb=#4\pst@yunit \advance\pst@dimb by \psk@lly%
\pst@dimc=#5\pst@xunit \advance\pst@dimc by \psk@urx%
\pst@dimd=#6\pst@yunit \advance\pst@dimd by \psk@ury%
\if@star\pspicture*(\pst@dima,\pst@dimb)(\pst@dimc ,\pst@dimd)\else%
\pspicture(\pst@dima,\pst@dimb)(\pst@dimc,\pst@dim d)\fi%
\psset[pstricks]{xunit=\pst@xunit,yunit=\pst@yunit}
\ifdim\pst@xunit=\pst@yunit \psset[pstricks]{runit=\pst@xunit}\fi%
%%% Hier dein Grid einfügen %%%
\bgroup%
\use@par%
\psaxes(#1,#2)(#3,#4)(#5,#6)%
\egroup%
\psgraph@vi(#1,#2)(#3,#4)(#5,#6)
}

\makatother
...
\begin{document}
...


HErbert

DaPhil
21-01-2011, 11:38
Hallo Herbert,
ich weiß es ist schon einige Zeit her... Aber dein Code funktioniert so nicht bei mir. Muss ich darin alle psgraph durch PSGraph ersetzen um dann diese Umgebung für das grid zu benutzen?



\documentclass[12pt,a4paper]{article}
\usepackage[applemac]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{graphicx}
\usepackage{pst-all}
\usepackage{pstricks-add}
\usepackage{pst-plot}
\usepackage{auto-pst-pdf}

\makeatletter
\def\psgraph@v(#1,#2)(#3,#4)(#5,#6)#7#8{% with special origin
% Xorig | yorig | minX | minY | maxX | maxY | Length x-axis | length y-axis%
\pst@killglue%
\begingroup%
\pstFPsub\pst@tempA{#5}{#3}%
\pst@dimm=#7%
\pst@dimo=\pst@tempA pt%
\pstFPdiv\pst@@dx{\strip@pt\pst@dimm}\pst@tempA%
\pst@xunit=\pst@@dx\p@%
%
\ifx!#8\let\pst@yunit=\pst@xunit\else
\pst@dimm=#8%
\pstFPsub\pst@tempA{#6}{#4}%
\pstFPdiv\pst@@dy{\strip@pt\pst@dimm}\pst@tempA%
\pst@yunit=\pst@@dy\p@%
\fi%
%
\pst@dima=#3\pst@xunit \advance\pst@dima by \psk@llx%
\pst@dimb=#4\pst@yunit \advance\pst@dimb by \psk@lly%
\pst@dimc=#5\pst@xunit \advance\pst@dimc by \psk@urx%
\pst@dimd=#6\pst@yunit \advance\pst@dimd by \psk@ury%
\if@star\pspicture*(\pst@dima,\pst@dimb)(\pst@dimc ,\pst@dimd)\else%
\pspicture(\pst@dima,\pst@dimb)(\pst@dimc,\pst@dim d)\fi%
\psset[pstricks]{xunit=\pst@xunit,yunit=\pst@yunit}
\ifdim\pst@xunit=\pst@yunit \psset[pstricks]{runit=\pst@xunit}\fi%
\psgrid[xunit=1.81818181818181818 cm,yunit=2.666666666666666666 cm,griddots=20,subgriddiv=0,gridlabels=0pt,gridwid th=0.5pt,gridcolor=black](11,0)(16.5,3)% Hier ist mein grid
\bgroup%
\use@par%
\psaxes(#1,#2)(#3,#4)(#5,#6)%
\egroup%
\psgraph@vi(#1,#2)(#3,#4)(#5,#6)
}

\makeatother

\begin{document}

\begin{figure}
\centering
\begin{postscript}
\def\xlength{10}
\def\ylength{8}

\def\xmin{220}
\def\xmax{330}
\def\ymin{0}
\def\ymax{3}

\def\myDx{20}
\def\myDy{1}

\pstFPsub\myxunit{\xmax}{\xmin}
\pstFPdiv\myxunit{\xlength}{\myxunit}
\pstFPmul\myxunit{\myxunit}{\myDx}
\pstFPsub\myyunit{\ymax}{\ymin}
\pstFPdiv\myyunit{\ylength}{\myyunit}
\pstFPmul\myyunit{\myyunit}{\myDy}
\pstFPdiv\gridxmin{\xmin}{\myDx}
\pstFPdiv\gridxmax{\xmax}{\myDx}
\pstFPdiv\gridymin{\ymin}{\myDy}
\pstFPdiv\gridymax{\ymax}{\myDy}

\psset{
xAxisLabelPos={c,-0.9cm},
yAxisLabelPos={-1.2cm,c},
xAxisLabel=Wellenlänge/nm,
yAxisLabel=Absorption/arb. units
}
\pslegend[lt](10,10){
~~\psline[linecolor=black](-2,0.04)(2,0.04)~~&\scriptsize{dsDNA} \\
~~\psline[linecolor=black,linestyle=dashed](-2,0.04)(2,0.04)~~&\scriptsize{ssDNA}
}
\begin{psgraph}[
axesstyle=frame,
comma=true,
%ylogBase=10,
%logLines=y,
Dx=\myDx,
Dy=\myDy,
Ox=\xmin,
Oy=\ymin,
showorigin=true,
linewidth=1pt,
ticks=all,
tickstyle=inner,
ysubticks=5,
xsubticks=2,
xticksize=5pt,
% xticklinestyle=dotted,
yticksize=5pt,
subticksize=0.5,
tickwidth=1pt,
linecap=1,
linejoin=0,
subtickcolor=black,
subtickwidth=1pt,
labels=all
](\xmin,\ymin)(\xmax,\ymax){\xlength cm}{\ylength cm}%

%\psclip{\psline[linestyle=none](\xmin,\ymin)(\xmax,\ymin)(\xmax,\ymax)(\xmin,\yma x)(\xmin,\ymin)}
% \psgrid[
% xunit=\myxunit cm,
% yunit=\myyunit cm,
% griddots=20,
% subgriddiv=0,
% gridlabels=0pt,
% gridwidth=0.5pt,
% gridcolor=red
% ](\gridxmin,\gridymin)(\gridxmax,\gridymax)
%\endpsclip

\end{psgraph}
\end{postscript}
\end{figure}
\end{document}