Anzeige:
Ergebnis 1 bis 14 von 14

Thema: nochmals \psgrid

  1. #1
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146

    nochmals \psgrid

    Hallo (Herbert),
    ich habe immer noch das Problem, dass bei der \begin{psgraph} Umgebung das grid, das ich innerhalb erzeuge, über die Achsen gemalt wird anstatt darunter. Ich habe deinen Code ausprobiert, mache aber offensichtlich noch einen Fehler, da kein grid gezeichnet wird.
    Code:
    \documentclass[12pt,a4paper]{article}
    \usepackage[applemac]{inputenc}
    \usepackage[ngerman]{babel}
    \usepackage{graphicx}
    \usepackage{pst-all}
    \usepackage{pstricks-add}
    \usepackage{pst-lens}
    \usepackage{auto-pst-pdf}
    
    \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@dimd)\fi%
      \psset[pstricks]{xunit=\pst@xunit,yunit=\pst@yunit}
      \ifdim\pst@xunit=\pst@yunit \psset[pstricks]{runit=\pst@xunit}\fi%
     \psgrid[...](...)(...)% <---- Hier habe ich mein grid eingefügt
      \bgroup%
      \use@par%
      \psaxes(#1,#2)(#3,#4)(#5,#6)%
      \egroup%
      \psgraph@vi(#1,#2)(#3,#4)(#5,#6)
    }
    
    \makeatother
    
    \begin{document}
    ...
    Kannst du mir da noch einmal helfen? Das würde mir sehr helfen.

  2. #2
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von DaPhil Beitrag anzeigen
    ich habe immer noch das Problem, dass bei der \begin{psgraph} Umgebung das grid, das ich innerhalb erzeuge, über die Achsen gemalt wird anstatt darunter. Ich habe deinen Code ausprobiert, mache aber offensichtlich noch einen Fehler, da kein grid gezeichnet wird.
    Ergänze mal das Beipiel zu einem kompletten, also die psgraph-Umgebung ergänzen.
    Ich sehe es mir dann morgen an.

    Herbert

  3. #3
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Wow Super, Danke!
    Code:
    \documentclass[12pt,a4paper]{article}
    \usepackage[applemac]{inputenc}
    \usepackage[ngerman]{babel}
    \usepackage{graphicx}
    \usepackage{pst-all}
    \usepackage{pstricks-add}
    \usepackage{pst-lens}
    \usepackage{auto-pst-pdf}
    
    \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@dimd)\fi%
      \psset[pstricks]{xunit=\pst@xunit,yunit=\pst@yunit}
      \ifdim\pst@xunit=\pst@yunit \psset[pstricks]{runit=\pst@xunit}\fi%
     \psgrid[xunit=\myxunit cm,yunit=\myyunit cm,griddots=20,subgriddiv=0,gridlabels=0pt,gridwidth=0.5pt,gridcolor=red](\gridxmin,\gridymin)(\gridxmax,\gridymax)%
      \bgroup%
      \use@par%
      \psaxes(#1,#2)(#3,#4)(#5,#6)%
      \egroup%
      \psgraph@vi(#1,#2)(#3,#4)(#5,#6)
    }
    
    \makeatother
    
    \begin{document}
    
    \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}%
    
    	\end{psgraph}
    \end{postscript}
    \end{document}

  4. #4
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Hallo Herbert,
    ich habe einen (aufwendigeren) workaround gefunden - bei dem mir aber neue Fragen gekommen sind.
    Ich möchte eine einzelne x-Achse setzen, die Labels sollen oben sein:
    Code:
    \documentclass[12pt,a4paper]{article}
    \usepackage[applemac]{inputenc}
    \usepackage[ngerman]{babel}
    \usepackage{graphicx}
    \usepackage{pst-all}
    \usepackage{auto-pst-pdf}
    \usepackage{pst-plot}
    
    \begin{document}
    
    \begin{postscript}
    	\def\pshlabel#1{\normalsize \colorbox{white}{#1}}
    	\def\psvlabel#1{\normalsize \colorbox{white}{#1}}
    	
    	\psset{
    		xAxisLabelPos={c,-0.9cm},
    		yAxisLabelPos={-1cm,c},
    		xAxisLabel=Wellenlänge $\lambda$/nm,
    		yAxisLabel=Absorption  $\alpha$/w. E.
    	}
    	
    	\begin{psgraph}[
    		axesstyle=axes,
    		yAxis=false,
    		xAxis=false,
    		ticks=none,
    		tickstyle=none,
    		labels=none
    	](220,0)(330,35){10 cm}{8 cm}%
    
    	\psaxes[
    		axesstyle=axes,
    		comma=true,
    		yAxis=false,
    %		ylogBase=10,
    %		logLines=y,
    		Dx=20,
    		Ox=220,
    		showorigin=true,
    		linestyle=1pt,
    		ticks=all,
    		tickstyle=inner,
    		xsubticks=5,
    		xticksize=5pt,
    		subticksize=0.5,
    		tickwidth=1pt,
    		linecap=1,
    		subtickcolor=black,
    		subtickwidth=1pt,
    		labels=x
    	](220,0)(330,35)
    	
    	\psaxes[
    		axesstyle=axes,
    		comma=true,
    		yAxis=false,
    %		ylogBase=10,
    %		logLines=y,
    		Dx=20,
    		Ox=220,
    		showorigin=true,
    		linestyle=1pt,
    		ticks=all,
    		tickstyle=inner,
    		xsubticks=5,
    		xticksize=-5pt,
    		subticksize=0.5,
    		tickwidth=1pt,
    		linecap=1,
    		subtickcolor=black,
    		subtickwidth=1pt,
    		labels=x,
    		xlabelPos=top,
    	](220,35)(330,0)
    
    	\end{psgraph}
    \end{postscript}
    \end{document}
    Hierbei werden die Labels aber auf die x-Achse gezeichnet. Schön wäre hier, wenn es derselbe Abstand zur Achse wäre, wie bei xlabelPos=bottom. Im Manual zu pst-plot sieht es auch so aus, bei mir leider nicht.

    Möchte man eine weitere x-Achse hinzufügen, möchte man diese auch beschriften. Mit xAxisLabel geht das nicht mehr, wenn man schon für die erste Achse die Labels und Positionen gesetzt hat. Wie setzte ich das Label mit genau gleichem Abstand zur oberen x-Achse in die Mitte? Am besten wäre es, man könnte xAxisLabel und xAxisLabelPos in der \psaxes-/\begin{psgraph}-Umgebung verwenden. Dann könnte man es für jede Achse einzeln setzen.

    Weitere Frage: Kommt man um multido herum, wenn man eine z.B. x-Achse mit ticks setzen möchte, die ticks aber nicht bei einem major tick anfangen? Gibt es also so etwas wie ein offset parameter, der die ticks und labels verschiebt? Bsp.: man möchte auf die x-Achse in 20er Schritten die majorticks haben und bei 290 starten. der erste major tick soll aber erst bei 300 kommen, dann bei 320,...

    Edit: Bei einer zweiten y-Achse funktioniert das mit yLabelPos=right! Da stimmen die Abstände!
    Geändert von DaPhil (20-02-2011 um 08:49 Uhr)

  5. #5
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von DaPhil Beitrag anzeigen
    ich habe einen (aufwendigeren) workaround gefunden - bei dem mir aber neue Fragen gekommen sind.
    mit den Versionen von pstricks.tex und pst-plot.tex von
    http://texnik.dante.de/tex/generic/
    kannst du bei den Parametern von psgraph folgendes angeben:
    Code:
            grid,
            gridpara={xunit=0.9091cm,yunit=\myyunit cm,
                      griddots=20,subgriddiv=0,gridlabels=0pt,gridwidth=0.5pt,
                      gridcolor=blue},
           gridcoor={(11,3)}
    dann gibt das in deinem Fall die folgende Ausgabe


    Herbert

  6. #6
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Danke vielmals Herbert,
    kannst du mir auch etwas zu meinen anderen Fragen sagen? Wie man die ticks setzt, wenn der erste tick kein major tick ist? Gibt es eine Möglichkeit, ein Label für eine zweite x-Achse so zu setzen, dass es dem der ersten (via xAxisLabel und xAxisLabelPos) entspricht? Taucht das Problem mit xlabelPos=bottom nur bei mir auf?

  7. #7
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von DaPhil Beitrag anzeigen
    kannst du mir auch etwas zu meinen anderen Fragen sagen? Wie man die ticks setzt, wenn der erste tick kein major tick ist? Gibt es eine Möglichkeit, ein Label für eine zweite x-Achse so zu setzen, dass es dem der ersten (via xAxisLabel und xAxisLabelPos) entspricht? Taucht das Problem mit xlabelPos=bottom nur bei mir auf?
    Da sind erst einmal mehrere Fehler drin, tickstyle=1pt geht nicht. Und
    ich verstehe nicht, wieso du zwei Label setzen willst.

    Herbert

  8. #8
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Beispiel: Ich möchte auf der unteren x-Achse die Wellenlänge in nm. Auf der oberen x-Achse soll die Energie in eV. Dann möchte oben auch ein Label haben dass mir das ausweist.

  9. #9
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von DaPhil Beitrag anzeigen
    Beispiel: Ich möchte auf der unteren x-Achse die Wellenlänge in nm. Auf der oberen x-Achse soll die Energie in eV. Dann möchte oben auch ein Label haben dass mir das ausweist.
    mach einfach:

    Code:
    	\psaxes[
           xlabelPos=top,
           labelsep=7pt,
    	   yAxis=false,
    		Dx=20,
    		Ox=220,
    		showorigin=true,
    		xsubticks=10,
    		xticksize=0 -5pt,
    		subticksize=0.5,
    		subtickcolor=black,
    	](220,3)(330,3)
      \uput{20pt}[90](275,3){Energie in eV}
    Herbert

  10. #10
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Warum kann man bei \uput labelsep nicht negativ setzen? Und ein Offset für die ticks und labels einer Achse sind nicht möglich, um nicht bei einem major tick starten zu müssen?
    Geändert von DaPhil (22-02-2011 um 10:28 Uhr)

  11. #11
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von DaPhil Beitrag anzeigen
    Warum kann man bei \uput labelsep nicht negativ setzen? Und ein Offset für die ticks und labels einer Achse sind nicht möglich, um nicht bei einem major tick starten zu müssen?
    Wozu denn ein Offset für die Ticks?
    Bei \uput reicht [-90] wenn es negativ sein soll.

    Herbert

  12. #12
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Die zweite x-Achse startet nicht mit einem großen Tick. Der kommt erst später. Siehe Anhang.

  13. #13
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von DaPhil Beitrag anzeigen
    Die zweite x-Achse startet nicht mit einem großen Tick. Der kommt erst später. Siehe Anhang.
    wie sollte sie denn auch, wenn das ein subtick ist???

    Herbert

  14. #14
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Die Achse SOLL ja mit einem subtick starten! Bzw., je nachdem wie der Zusammenhang zwischen 1. und 2. Achse ist, auch zwischen zwei subticks. Ich denk es ist am besten ich bastele mir eine eigene Achse.

Lesezeichen

Berechtigungen

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