PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sternzeichnung mit listplot ?!?



Goldnas
09-08-2012, 21:08
Problem 1:

Hallo!

Steinigt mich, ich weiß, das ist kein Minimalbeispiel. Meine Diagramme werden aber alle ziemlich dynamisch erstellt und es geht mir in diesem Punkt nur um einen bestimmten Codeabschnitt..... ich erkläre dann nachher nochmals, was mein Problem ist. Der Code, der hier reingestellt wird dient eigentlich nur um zu verdeutlichen, was ich möchte..... denn den Fehler zu beschreiben ist schwierig. Es ist auch nicht notwendig, den Fehler zu beschreiben, glaube ich. Es geht nur um eine alternative Lösungen für einen bestimmten Codeabschnitt.....

Was der Code tut, wird beschrieben....

Folgende Datei ist als Input Datei gedacht.....




-0.013,0.471
0.044,-0.294
-0.069,0.446
0.025,-0.385
0.038,-0.448
0.073,-0.365
0.375,0.045
0.375,0.045
0.375,0.040
0.375,0.039
0.375,0.038
0.375,0.035
0.375,0.033



Mein Code sieht dabei folgendermaßen aus.....



\documentclass{scrreprt}

\usepackage{scrpage2}
\usepackage[ansinew]{inputenc}
%\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[full]{textcomp} % Euro-Zeichen etc...

\usepackage{datatool}
\usepackage{graphicx}
\usepackage{rotating}
\usepackage{array}
\usepackage{ragged2e}

\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}

\usepackage{pstricks}
\usepackage{pst-plot} %27.07.2012 testweise
\usepackage{etoolbox}

\makeatletter
\def\ifinstr#1#2{%
\def\@ifinstr##1#2##2\@nil{%
\ifstrempty{##2}{\@secondoftwo}{\@firstoftwo}}%
\@ifinstr#1\@@nil#2\@nil
}

\def\popleft#1#2{%
\edef\@tmpa{#1}%
\expandafter\@popleft\expandafter{\@tmpa}{#1}{#2}}
\def\@popleft#1#2#3{%
\ifinstr{#1}{|}
{\@@popleft{#2}{#3}\q@nil#1\q@stop}
{\@@popleft{#2}{#3}\q@nil#1|\q@stop}}
\def\@@popleft#1#2\q@nil#3|#4\q@stop{\edef#1{#4}\e def#2{#3}}

\newcommand*\assignvalues[2]{\@assignvalues{#1}{#2}}
\def\@assignvalues#1#2{%
\edef\@tmpb{#1}\edef\@tmpc{#2}%
\popleft\@tmpb\currentvalueA
\popleft\@tmpc\currentvalueB
\csedef{\currentvalueA}{\currentvalueB}%
\ifdefempty\@tmpb{}{\assignvalues\@tmpb\@tmpc}%
}
\makeatother

\FPset\tsize{0.75} % Schriftgröße
\FPset\ttsize{0.45} % Tabellengröße
\FPset\picsize{0.75}
\FPset\schriftgr{0.75}
\FPset\pseta{9.75} % Spalte 1
\FPset\schriftgrad{0.4} % Anderson Darling Schriftgröße

%\FPset\digitx{2}
%\FPset\digity{2}
\FPset\digitz{5}
%\FPset\digite{0}
%\FPset\digitf{8}
%\FPset\digitg{5}
\FPset\scalex{1.0}
\FPset\scaley{1.0}
\FPset\scaler{1.0}


\begin{document}

\assignvalues{xstart|xend|ystart|yend|yistart|nhli nes|nvlines|nvunit|hilfsgitternetzlinien|alternati vskalierung|inputf|altscale|rgg}{0|9|-0.8|4.6|0|14|10|2|5|0.35|Messdaten/statistik/rohstoffextruder.dat|1|0}
\assignvalues{dart}{loading}
\assignvalues{mbstartx|mbstepx|mbstarty|mbstepy}{1 |1|1|1}
\assignvalues{bottomdesc|leftdesc|topdesc|rightdes c|lab|bcaption}{Unten|Links|Oben|Rechts|label|Beze ichnung}
\assignvalues{nvlines|nhlines|lab|mbstartx|mbstepx |hilfsgitterlinien|mbstarty|mbstepy|bcaption|botto mdesc|leftdesc}{5|4|fig:LoadingPlot|-0.1|0.1|15|-0.50|0.25|Loading Plot Rohstoff Extruder|Erste Komponente|Zweite Komponente}
\assignvalues{scalex|scaley|scaler}{1|1|1}

\assignvalues{dummyj|dummyba|dummyh|xendn|dummyq|a ltscale|miny|dummyu|dummybb|dummyr|dummyl|dummym|d ummyb|minstarty|dummyu|dummyt|schriftgrad|gesamthl |messb|dummyd|nhlinesn|minstart|dummyr|dummybb|dis tmove}
{-0.600000000000000000|-0.069|-0.1|9|0.5|1|-0.448|-0.50|4.6|1.15000|1.80000|0.12000|1.8|0.25|-0.50|0|0.4|75|1|6|5|0.1|1.15000|4.6|1.000000000000 000000}

\readdata{\dataA}{Messdaten/statistik/rohstoffextruder.dat}

\ifthenelse{\equal{\messb}{1}}{\message{^^JLade Datenquelle(n) für Diagramm \bcaption\space^^J}}{}
\DTLsetseparator{,}
\DTLifdbexists{table4441}{\DTLdeletedb{table4441}} { }
\DTLloaddb[noheader,keys={wertx,werty}]{table4441}{\inputf}
\readdata{\dataA}{\inputf}
\ifthenelse{\equal{\messb}{1}}{\message{^^JEinige FP rechnungen, die durch Assignvalues ersetz worden sind..... \bcaption\space^^J}}{}

\begin{figure}[htbp]
%\begin{center}
\centering
\psset{xunit=\scalex cm,yunit=\scaley cm, runit=\scaler cm}

\pstScalePoints(1,1){\dummyba\space \dummyh\space neg \dummyba\space sub add add \xendn\space mul \dummyq\space\altscale\space mul \space div}{\miny\space neg \dummyu\space neg \miny\space neg sub add add \dummybb\space mul}
%
\ifthenelse{\equal{\messb}{1}}{\message{^^JZeichne Bildbereich}}{}
%
\begin{pspicture}(\xstart,\ystart)(\xend,\yend)
%
\ifthenelse{\equal{\messb}{1}}{\message{Zeichne die Gitternetzlinien für Diagramm \bcaption\space ^^J}}{}
%
\multiput(\xstart,\dummyr)(\xstart,\dummyr){\nhlin es}{\psline[linecolor=black,linestyle=dashed,linewidth=0.4pt](\xstart,\yistart)(\xend,\yistart)}
\multiput(\xstart,\dummyr)(\xstart,\dummyr){\nhlin es}{\psline[linecolor=black,linewidth=0.8pt](-0.1,0)(0,0.0)}
%
\multiput(\dummyl,\yistart)(\dummyl,\yistart){\nvl ines}{\psline[linecolor=black,linestyle=dashed,linewidth=0.4pt](\xstart,\yistart)(\xstart,\yend)}
\multiput(\dummym,\yistart)(\dummym,\yistart){\ges amthl}{\psline[linecolor=black,linestyle=dotted,linewidth=0.4pt](\xstart,\yistart)(\xstart,\yend)}
\multiput(\dummyl,\yistart)(\dummyl,\yistart){\nvl ines}{\psline[linecolor=black,linewidth=0.8pt](0,-0.1)(0,0.0)}
%
\ifthenelse{\equal{\messb}{1}}{\message{Die Gitternetzlinien für Diagramm \bcaption\space wurden fertiggestellt^^J}}{}
\ifthenelse{\equal{\messb}{1}}{\message{Beginne die Beschriftung für Diagramm \bcaption\space ^^J}}{}
%
\multido{\na=\dummyh+\minstart,\nb=0+\dummyb}{\dum myd}{\rput{0}(\nb,-0.3){\FPclip\na\na \scalebox{\schriftgrad}{\na}}}
\multido{\na=\dummyt+\dummyr,\nb=\dummyu+\minstart y}{\nhlinesn}{\rput{0}(-0.5,\na){\FPclip\nb\nb
\scalebox{\schriftgrad}{\nb}}}
\uput[0](\dummyj,-0.7){%
\scalebox{\scalex}{
\begin{tabular}{C{\xend cm}}
\scalebox{\tsize}{\bottomdesc}
\end{tabular}
}}
%
\uput[90](-1.3,-0.7){\rotateleft {%
\scalebox{\scaley}{
\begin{tabular}{C{\yend cm}}
\scalebox{\tsize}{\leftdesc} \\
\end{tabular}
}}} % Achsenbeschriftung y
\ifthenelse{\equal{\messb}{1}}{\message{Die Beschriftung für Diagramm \bcaption\space wurde fertig gestellt^^J}}{}


\ifthenelse{\equal{\messb}{1}}{\message{^^JZeichne die Daten von \bcaption\space ^^J}}{}

\ifthenelse{\equal{\dart}{loading}}{
\DTLforeach{table4441}{%
\wertx=wertx,\werty=werty}{
\FPupn{X}{\wertx}
\FPupn{X}{X \dummyba\space \dummyh\space neg \dummyba\space sub add add \xendn\space mul \dummyq\space\altscale\space mul \space div}
\FPround\X\X\digitz
\FPupn{Y}{\werty}
\FPupn{Y}{Y \miny\space neg \dummyu\space neg \miny\space neg sub add add \dummybb\space mul}
\FPupn{Xs}{\minstart\space \distmove\space mul \xendn\space mul \dummyq\space\altscale\space mul \space div}
\FPupn{Ys}{\dummyu\space neg \dummybb\space mul} \psline[linecolor=black,linestyle=dashed,linewidth=0.4pt](\Xs,\Ys)(\X,\Y)
}
}{}

\ifthenelse{\equal{\dart}{screen}}{
\listplot[plotstyle=line, linewidth=1.73pt, linecolor=black,showpoints=false,dotstyle=*,dotsiz e=4pt]{\dataA} % Punkte Blau 200 Grad
\listplot[plotstyle=dots, linewidth=1.73pt, linecolor=white,showpoints=true,dotstyle=*,dotsize =6pt]{\dataA} % Punkte Blau 200 Grad
\listplot[plotstyle=dots, linewidth=1.73pt, linecolor=black,showpoints=true,dotstyle=*,dotsize =4pt]{\dataA} % Punkte Blau 200 Grad
}{}

\ifthenelse{\equal{\dart}{loading}}{
\listplot[plotstyle=dots, linewidth=1.73pt, linecolor=white,showpoints=true,dotstyle=*,dotsize =6pt]{\dataA} % Punkte Blau 200 Grad
\listplot[plotstyle=dots, linewidth=1.73pt, linecolor=black,showpoints=true,dotstyle=*,dotsize =4pt]{\dataA} % Punkte Blau 200 Grad
}{}



% Achsen
% X-Achse

\psline(\xstart,\yistart)(\xend,\yistart)
% Y-Achse
\psline(\xstart,\yistart)(\xstart,\yend)
\psline(\xend,\yistart)(\xend,\yend)
\psline(\xstart,\yend)(\xend,\yend)
%

\end{pspicture}
\caption[\bcaption]{\bcaption}
\label{\lab}
%\end{center}
\end{figure}
\end{document}



Letztendlich habe ich ein Problem mit Codeteilen von Multido (also entweder multido....) oder mit dem von datatool. Irgendwo spiesst es sich, wenngleich das ps und das dvi file völlig korrekt aussieht. Tut aber nimmer beim gesamten Paket meiner DA.

Das Ziel dieses Beispiel ist es daher, mit den vorhandenen Werten das Diagramm zu erzeugen unter Vermeidung von datatool.

Die sternhaften Linien werden durch den Codeteil......




\ifthenelse{\equal{\dart}{loading}}{
\DTLforeach{table4441}{%
\wertx=wertx,\werty=werty}{
\FPupn{X}{\wertx}
\FPupn{X}{X \dummyba\space \dummyh\space neg \dummyba\space sub add add \xendn\space mul \dummyq\space\altscale\space mul \space div}
\FPround\X\X\digitz
\FPupn{Y}{\werty}
\FPupn{Y}{Y \miny\space neg \dummyu\space neg \miny\space neg sub add add \dummybb\space mul}
\FPupn{Xs}{\minstart\space \distmove\space mul \xendn\space mul \dummyq\space\altscale\space mul \space div}
\FPupn{Ys}{\dummyu\space neg \dummybb\space mul} \psline[linecolor=black,linestyle=dashed,linewidth=0.4pt](\Xs,\Ys)(\X,\Y)
}
}{}


Erzeugt.

Ziel ist es also, ohne Datatool mit durch diese so gestrickte Datei....

linien der Form

psline(1,2)(3,4)
psline(1,2)(2,3)
psline(1,2)(4,4)
psline(1,2)(1,1)
psline(1,2)(0.3,4.2)

zu erhalten.

Die Werte (1,2) werden von mir vorab kalkuliert, der Zweite Punkt ergibt sich aus dem Inputfile, welches gelesen wird.....
ich denk an....%\psRelLine(A)(B){0.5}{E} aber mir ist nicht klar, wie ich das umsetzen muß, sicher mit postscript.... naja nicht sicher aber ich denke in die richtung....


Problem 2
Gibt es eine Funktion, bei der man linien zeichnen kann der form psline(A)(B)
wobei A und B sowie weitere koordinaten in einer datei stehen?
File sieht so aus.....
0,1.45206706,6,1.45206706,0.1,0,0,0,0,0
0,1.45620033,6,1.45620033,1.0,0,0,0,0,0
0,1.46185358,6,1.46185358,10.0,0,0,0,0,0
0,1.46423398,6,1.46423398,20.0,0,0,0,0,0
0,1.46595042,6,1.46595042,30.0,0,0,0,0,0
0,1.46741705,6,1.46741705,40.0,0,0,0,0,0
0,1.46878787,6,1.46878787,50.0,0,0,0,0,0
0,1.4701587,6,1.4701587,60.0,0,0,0,0,0
0,1.47162533,6,1.47162533,70.0,0,0,0,0,0
0,1.47334177,6,1.47334177,80.0,0,0,0,0,0
0,1.47572217,6,1.47572217,90.0,0,0,0,0,0
0,1.47768794,6,1.47768794,95.0,0,0,0,0,0
0,1.48137541,6,1.48137541,99.0,0,0,0,0,0
0,1.48550868,6,1.48550868,99.9,0,0,0,0,0


Ziel wäre es hier, Linien zu zeichnen und teile der datei als y Koordinaten herzunehmen.....psline(1,1.4855)(3,1.4855)....

oder eine Beschriftung zu machen put(-1,1.4555){99.9}.....

Ich denke an die Richtung dass ich hier.... die listplotfunktion aufrufe und die koordianten definiere und womöglich über psgetnodecenter wie genau weiß Gott allein....

und Herbert Voss...*g*

LG Goldnas

Goldnas
10-08-2012, 23:32
Problem gelöst.

Message Befehl direkt vor "DTLforeach" geht nicht.

Ersetze Zeile

\ifthenelse{\equal{\messb}{1}}{\message{^^JZeichne die Daten von \bcaption\space ^^J}}{}

durch

\ifthenelse{\equal{\messb}{1}}{\message{^^JZeichne die Daten von \bcaption\space ^^J}\pnode(1,1){dummynode}}{}

Damit ist das Problem gelöst.


LG Goldnas