Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 24

Thema: Rechnen in PSTricks

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

    Rechnen in PSTricks

    Hallo,
    ich möchte mit PSTricks einen Graphen erstellen. Das funktioniert auch soweit. Jetzt möchte ich noch ein paar Parameter berechnen, damit ich das nicht für jeden Graphen einzeln machen möchte. Allerdings funktioniert das nicht ganz. Hier mein Versuch:
    Code:
    \listfiles
    \documentclass[12pt,a4paper]{article}
    
    \usepackage{graphicx}
    
    \usepackage{pst-all}
    \usepackage{pstricks-add}
    \usepackage{auto-pst-pdf}
    
    \begin{document}
    
    \begin{figure}
    \begin{postscript}
    	\newlength\xlength \setlength\xlength{13cm}
    	\newlength\ylength \setlength\ylength{8cm}
    	\newlength\zero \setlength\zero{5cm}
    	
    	\def\xmin{500}
    	\def\xmax{3000}
    	\def\ymin{0}
    	\def\ymax{5}
    	
    	\makeatletter
    	\def\myxunit{
    		\pst@number\xlength \pst@number\ylength sub	
    	}
    	\makeatother
    	% hier dann meine Zeichenkommandos
    \end{postscript}
    \caption{Image done with pstricks.}
    \end{figure}
    \end{document}
    Kann mir jemand helfen?

  2. #2
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    was genau willst du denn erreichen?

    Gruß
    Marco

  3. #3
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Ich möchte mir die Größe für das grid ausrechnen, damit ich das nicht per Hand für jeden Graphen machen muss. D.h. ich gebe beim Graphen nur an, von wo bis wo ich meine Daten habe und wie große der Graph werden soll, und ich errechne mir von wo bis wo mein grid laufen muss. Beispiel:
    Code:
    \newlength\xlength \setlength\xlength{13cm}
    \newlength\ylength \setlength\ylength{8cm}
    
    \def\xmin{500}
    \def\xmax{3000}
    \def\ymin{0}
    \def\ymax{5}
    Hier habe ich angegeben, dass meine x-Achse von 500 bis 3000, die y-Achse von 0 bis 5 läuft. Der Graph soll insgesamt 13cmx8cm groß sein. Das grid muss dann so aussehen:
    Code:
    \psgrid[
    	xunit=2.6cm,
    	yunit=1.6cm,
    	griddots=20,
    	subgriddiv=0,
    	gridlabels=0pt,
    	gridwidth=0.5pt,
    	gridcolor=black
    ](1,0)(6,5)
    Denn: xunit=13/((3000-500)/Dx) wobei Dx die Schrittgröße in \begin{psgraph} ist, die hier 500 ist.
    Geändert von DaPhil (25-11-2010 um 18:58 Uhr)

  4. #4
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    kennst du die Umgebung psgraph?

    Gruß
    Marco

  5. #5
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Jaja, die benutz ich ja. Hier mein kompletter Code, aber die Daten die ich einbinde sind nicht dabei:
    Code:
    \listfiles
    \documentclass[12pt,a4paper]{article}
    
    \usepackage{graphicx}
    
    \usepackage{pst-all}
    \usepackage{pstricks-add}
    \usepackage{auto-pst-pdf}
    
    \begin{document}
    
    \begin{figure}
    \begin{postscript}
    	\newlength\xlength \setlength\xlength{13cm}
    	\newlength\ylength \setlength\ylength{8cm}
    	
    	\def\xmin{500}
    	\def\xmax{3000}
    	\def\ymin{0}
    	\def\ymax{5}
    	
    	\makeatletter
    	\def\myxunit{
    		\pst@number\xlength \pst@number\ylength sub	
    	}
    	\makeatother
    	
    	\psset{
    		xAxisLabelPos={c,-0.9cm},
    		yAxisLabelPos={-1.2cm,c},
    		xAxisLabel=Kanal \(\pi\),
    		yAxisLabel=Ereignisse
    	}
    	\begin{psgraph}[
    		axesstyle=frame,
    		comma=true,
    		ylogBase=10,
    		logLines=y,
    		Dx=500,
    		Dy=1,
    		Ox=500,
    		Oy=0,
    		showorigin=true,
    		linewidth=1pt,
    		ticks=all,
    		tickstyle=inner,
    		ysubticks=10,
    		xsubticks=5,
    		xticksize=5pt,
    %		xticklinestyle=dotted,
    		yticksize=5pt,
    		subticksize=0.5,
    		tickwidth=1pt,
    		linecap=1,
    		subtickcolor=black,
    		subtickwidth=1pt,
    		labels=all
    	](\xmin,\ymin)(\xmax,\ymax){\xlength}{\ylength}
    	
    	\psgrid[
    		xunit=2.6cm,
    		yunit=1.6cm,
    		griddots=20,
    		subgriddiv=0,
    		gridlabels=0pt,
    		gridwidth=0.5pt,
    		gridcolor=black
    	](1,0)(6,5)
    	
    	\readdata[nStep=10]{\data}{Daten_Caesium_test.txt}
    	\pstScalePoints(1,1){}{dup 0 gt {log} if}
    	\listplot[
    		plotNoMax=1,
    		plotNo=1,
    		nStep=1,
    		plotstyle=dots,
    		dotstyle=*,
    		dotsize=1pt,
    		linecolor=black,
    		linewidth=0.5pt,
    		showpoints=true,
    		xStart=\xmin,
    		xEnd=\xmax
    	]{\data}
    	
    	\rput[tl](3cm,7.5cm){
    		\psframebox[linewidth=0.3pt,fillcolor=white,fillstyle=solid]{
    			\psset{unit=1cm}
    			\begin{pspicture}(2,0.2)
    				\psdot[dotsize=1pt,linecolor=black](0,0.1)
    				\uput[r](0,0.1){Messdaten}
    			\end{pspicture}
    		}
    	}
    	\end{psgraph}
    \end{postscript}
    \caption{Image done with pstricks.}
    \end{figure}
    
    \end{document}
    Geändert von DaPhil (25-11-2010 um 19:02 Uhr)

  6. #6
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von DaPhil Beitrag anzeigen
    Hier habe ich angegeben, dass meine x-Achse von 500 bis 3000, die y-Achse von 0 bis 5 läuft. Der Graph soll insgesamt 13cmx8cm groß sein. Das grid muss dann so aussehen:
    Code:
    \psgrid[
    	xunit=2.6cm,
    	yunit=1.6cm,
    	griddots=20,
    	subgriddiv=0,
    	gridlabels=0pt,
    	gridwidth=0.5pt,
    	gridcolor=black
    ](1,0)(6,5)
    Denn: xunit=13/((3000-500)/Dx) wobei Dx die Schrittgröße in \begin{psgraph} ist, die hier 500 ist.
    Wozu willst du \psgrid verwenden, das kannst du doch alles
    mit psgraph machen??

    Herbert

  7. #7
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Wie? Ich habe zwar die Möglichkeit, ein grid mit den ticks zu zeichnen, aber dann habe ich erstens keine ticks, und zweitens ist der grid dann nicht sehr schön. Wenn sich 2 grid Linien treffen, dann sind die Punkte nicht übereinander... Das sieht mit \psgrid einfach schöner aus! Deswegen möchte ich \psgrid benutzen. Zum Vergleich mein Versuch den grid nur mit \begin{psgraph} zu machen:
    Code:
    \begin{psgraph}[
    	axesstyle=frame,
    	Dx=5,
    	Dy=5,
    	Ox=0,
    	Oy=0,
    	showorigin=true,
    	linewidth=0.5pt,
    	ticks=all,
    	tickstyle=inner,
    	ysubticks=5,
    	xsubticks=5,
    	xticksize=0 20,
    	yticksize=0 15,
    	ticklinestyle=dotted,
    	subticksize=0,
    	tickwidth=0.4pt,
    	linecap=1,
    	subtickcolor=black,
    	subtickwidth=0.5pt,
    	labels=all
    ](0,0)(15,20){0.4\linewidth}{0.3\linewidth}

  8. #8
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von DaPhil Beitrag anzeigen
    Wie? Ich habe zwar die Möglichkeit, ein grid mit den ticks zu zeichnen, aber dann habe ich erstens keine ticks, und zweitens ist der grid dann nicht sehr schön. Wenn sich 2 grid Linien treffen, dann sind die Punkte nicht übereinander... Das sieht mit \psgrid einfach schöner aus! Deswegen möchte ich \psgrid benutzen. Zum Vergleich mein Versuch den grid nur mit \begin{psgraph} zu machen:
    du zeichnest einfach nochmal die Achse ohne label:
    Code:
    \documentclass[12pt,a4paper]{article}
    
    \usepackage{graphicx}
    \usepackage{pstricks-add}
    \usepackage{auto-pst-pdf}
    
    \begin{document}
    
    \begin{figure}
    \begin{postscript}
    \psset{
    		xAxisLabelPos={c,-0.9cm},
    		yAxisLabelPos={-1.2cm,c},
    		xAxisLabel=Kanal \(\pi\),
    		yAxisLabel=Ereignisse,
            llx=-1cm,lly=-5mm,
    	}
    \begin{psgraph}[
    	axesstyle=frame,
    	comma=true,
    	ylogBase=10,
    	logLines=y,
    	Dx=500,
    	Dy=1,
    	Ox=500,
    	Oy=0,
    	showorigin=true,
    	linewidth=1pt,
    	ticks=all,
    	tickstyle=inner,
    	ysubticks=10,
    	xsubticks=5,
    	xticksize=5pt,
    %	xticklinestyle=dotted,
    	yticksize=5pt,
    	subticksize=0.5,
    	tickwidth=1pt,
    	linecap=1,
    	subtickcolor=black,
    	subtickwidth=1pt,
    	labels=all](500,0)(3000,5){13cm}{8cm}
    \psaxes[Dx=500,labels=none,ticklinestyle=dashed,tickcolor=black!20,
      xticksize=0 8cm,yticksize=0 13cm
      ](500,0)(3000,5)
    %	\readdata[nStep=10]{\data}{Daten_Caesium_test.txt}
    \pstScalePoints(1,1){}{dup 0 gt {log} if}
    \listplot[
      plotNoMax=1,
      plotNo=1,
      nStep=1,
      plotstyle=dots,
      dotstyle=*,
      dotsize=1pt,
      linecolor=black,
      linewidth=0.5pt,
      showpoints=true,
    ]{0 1 1 2 3 3 4 6}
    \rput[tl](3cm,7.5cm){%
      \psframebox[linewidth=0.3pt,fillcolor=white,fillstyle=solid]{%
     	\psdot[dotsize=1pt,linecolor=black](0,0.1)~Messdaten}}
    \end{psgraph}
    \end{postscript}
    \caption{Image done with pstricks.}
    \end{figure}
    
    \end{document}
    Beispiel enthält auch eine vereinfachte \rput-Anweisung.

    Herbert

  9. #9
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Ok, aber: Wenn ich ticklinestyle=dotted benutze, sind die Punkte wieder sehr unschön. Kann ich also nicht die Werte nehmen die ich oben definiere, also xmin xmax usw und mir daraus einen neuen Wert berechnen? Das wäre für mich gerade die einfachste Lösung, wenn es denn geht.
    Und, kann man irgendwie auf die Werte zugreifen, die pstricks intern benutzt um zu zeichnen? Beispielsweise die Koordinaten der oberen linken Ecke?
    Danke trotzdem für die Hilfe.
    Geändert von DaPhil (26-11-2010 um 13:42 Uhr)

  10. #10
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von DaPhil Beitrag anzeigen
    Ok, aber: Wenn ich ticklinestyle=dotted benutze, sind die Punkte wieder sehr unschön. Kann ich also nicht die Werte nehmen die ich oben definiere, also xmin xmax usw und mir daraus einen neuen Wert berechnen? Das wäre für mich gerade die einfachste Lösung, wenn es denn geht.
    Und, kann man irgendwie auf die Werte zugreifen, die pstricks intern benutzt um zu zeichnen? Beispielsweise die Koordinaten der oberen linken Ecke?
    Code:
    \pstFPdiv\psttempA{13}{5}% werte kannst du mit \xMin usw ersetzen.
    \pstFPdiv\psttempB{8}{5}
    \psgrid[
    	xunit=\psttempA cm,
    	yunit=\psttempB cm,
    	griddots=20,
    	subgriddiv=0,
    	gridlabels=0pt,
    	gridwidth=0.5pt,
    	gridcolor=black](1,0)(6,5)
    Herbert

  11. #11
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Ah, das klappt, sehr vielen Dank! Die Koordinaten, die genutzt werden um die Ecken des Koordinatensystems zu zeichnen kann man aber nicht benutzen?

  12. #12
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von DaPhil Beitrag anzeigen
    Ah, das klappt, sehr vielen Dank! Die Koordinaten, die genutzt werden um die Ecken des Koordinatensystems zu zeichnen kann man aber nicht benutzen?
    die werden einfach an PostScript weitergereicht. Wenn du da
    was machen willst, dann geht das nur über

    \pstVerb{...}

    Um zu verstehen, wie das Gitter gezeichnet wird, musst du dir
    die PS-Funktion Grid in pstricks.pro ansehen.

    Herbert

  13. #13
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Also ich hab mir die Datei mal angeschaut... Und ich habe keine Ahnung wie ich da jetzt die Koordinaten herausbekomme...

  14. #14
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von DaPhil Beitrag anzeigen
    Also ich hab mir die Datei mal angeschaut... Und ich habe keine Ahnung wie ich da jetzt die Koordinaten herausbekomme...
    mach ein _komplettes_ Beispiel, was auch durchläuft. Anstelle der
    zu berechnen Werte kannst du auch erst irgendwelche Zahlen nehmen
    und schreibst daneben, was es eigentlich sein sollte. Bsp:

    ...=12 % hier eigentlich obere linke Ecke.

    Herbert

  15. #15
    Registrierter Benutzer
    Registriert seit
    29.06.2009
    Beiträge
    146
    Code:
    \listfiles
    \documentclass[12pt,a4paper]{article}
    
    \usepackage{graphicx}
    
    \usepackage{pst-all}
    \usepackage{pstricks-add}
    \usepackage{auto-pst-pdf}
    
    \begin{document}
    
    \begin{figure}
    \centering
    \begin{postscript}
    	\begin{psgraph}[
    		axesstyle=frame,
    		comma=true,
    		showorigin=true,
    		linewidth=1pt,
    		ticks=all
    	](0,0)(5,1.5){8 cm}{6 cm}
    	
    	\rput[tl](1cm,1cm){%hier eigentlich obere linke Ecke
    		\psframebox[linewidth=0.5pt,fillcolor=white,fillstyle=solid]{
    				~\psdot[dotsize=3pt,dotstyle=Bo,fillcolor=white,linecolor=black](0,0.025)~\scriptsize{Messdaten}
    		}
    	}
    	
    	\end{psgraph}
    \end{postscript}
    \caption{Image done with pstricks.}
    \end{figure}
    \end{document}
    Wie bekommt man in der Framebox eine zweite Zeile? Mit \\ oder \par funktioniert es nicht, eine Tabelle einzufügen macht die Abstände zur Box wesentlich größer... Gibt es eine Möglichkeit, den Punkt, der in der Framebox steht, mittig vor die Schrift zu setzen, ohne zu raten welche Koordinate man eintragen muss (also hier habe ich 0.025 ausprobiert, ist aber nicht wirklich die Mitte)?

Lesezeichen

Berechtigungen

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