PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Diagramme mit PSTricks: 2 kleine Fragen



MasterFX
16-11-2007, 16:24
Hallo zusammen.
Ich stehe vor folgendem Problem. Ich wollte mit PSTricks mehrere Plots machen. Die Daten habe ich in einer Datei (also die X und Y-Werte). Dieses Diagramm soll die Geschwindigkeit einer Netzwerkkarte in Abhängigkeit von der Paketgröße darstellen. Soweit kein Problem.
Erste Frage:
Ich wollte im gleichen Diagramm die CPU-Last in Abhängigkeit der Paketgröße darstellen. Daher muss die Beschriftung der Y-Achse auf der linken Seite für die Datendurchsatz in MBit/s sein und auf der rechten Y-Achse soll die CPU-Last von 0-100% sein. Ist das möglich, wenn ja wie?

Zweite Frage:
Ist es möglich mehere Messreihen zusammenzuzählen? Sprich ich habe eine Datei, die meinetwegen so aussieht


1 310 290
2 320 280
4 325 275
8 330 272
16 332 270
32 340 268

Wobei die erste Spalte die Paketgröße ist, die zweite die TX Geschwindigkeit und die dritte die RX Geschwindigkeit. Jetz möchte ich daraus automatisch einen dritten Plot erzeugen wo RX und TX addiert wurden. Ist das irgendwie möglich, oder muss ich das vorher selber alles in Excel oder so machen?

MasterFX
18-11-2007, 13:01
Hat das wirklich noch keiner gemacht? :(

MasterFX
21-11-2007, 11:13
ich komme mir ja schon ein wenig bescheuert vor mit selbst antworten zu müssen, aber wenns noch keiner gemacht hat.
Auf jeden fall kann man mehrere Messreihen schonmal in eine Datei machen


[% bsp
x0 y1 y2 y3
x1 y1 y2 y3
x2 usw
]

Zum einlesen und Ausgeben jetzt sowas wie:


\readdata{\data}{multi_messreihen.dat}
\listplot[plotstyle=line,linecolor=magenta, linewidth=1.5pt, plotNo=1,plotNoMax=6]{\data} % erste Messreihe
\listplot[plotstyle=line,linecolor=green, linewidth=1.5pt, plotNo=2,plotNoMax=6]{\data} % zweite Messreihe

Wobei plotNoMax die Anzahl der Y-Werte in einer Reihe ist.
Fürs zusammenrechnen muss ich mir wohl was anderen einfallen lassen. Vielleicht ein kleines C-Programm oder so...

sofa-surfer
21-11-2007, 12:24
Hallo,

wenn dir hier niemand antwortet, dann poste mal auf der PSTricks-Mailingliste. Dort wird dir mit Sicherheit geholfen.

Matthias

localghost
21-11-2007, 19:24
Hat das wirklich noch keiner gemacht? :(
Nun, ja. Sowas schüttelt man sich auch nicht mal eben aus dem Ärmel. Und Du hast ja schon einen guten Anfang gemacht. Ich selbst habe mit PSTricks (http://tug.org/PSTricks/) immer nur Funktionen dargestellt. Datensätze habe ich bisher mit GNUplot (http://www.gnuplot.info) oder Octave (http://www.gnu.org/software/octave) geplottet. Aber ich habe da in meinem Labor mal was vorbereitet.

\begin{filecontents*}{multi.dat}
1 310 290
2 320 280
4 325 275
8 330 272
16 332 270
32 340 268
\end{filecontents*}
\documentclass[12pt]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\usepackage[ngerman]{babel}
\usepackage{pstricks-add}

% Einstellungen für Eingabecodierung (selinput)
\SelectInputMappings{
adieresis={ä},
germandbls={ß},
Euro={€},
}

\begin{document}
\begin{figure}[!ht]
\centering
\small
\psset{llx=-1.2cm,lly=-1cm,urx=1mm,ury=1mm,plotNoMax=2}
\psset{xAxisLabel={Paketgröße [Byte]},xAxisLabelPos={20,-0.8cm},yAxisLabel={Geschwindigkeit [Mbit/s]},yAxisLabelPos={-1.2cm,250}}
\readdata{\data}{multi.dat}
% \psframebox[linestyle=dashed,linewidth=0.4pt]{
\begin{psgraph}[Dx=10,Dy=100,subticks=5,ticksize=0pt 4pt](0,0)(0,0)(40,500){10.5cm}{7.5cm}
\psaxes[Dx=10,Dy=100,subticks=5,labels=none,ticksize=-4pt 0](40,500)(0,0)(40,500)
\listplot[plotstyle=line,linecolor=magenta,linewidth=1.5pt,p lotNo=1]{\data} % erste Messreihe
\listplot[plotstyle=line,linecolor=green,linewidth=1.5pt,plo tNo=2]{\data} % zweite Messreihe
% \rput{90}(42,250){TX}
\rput[tl](1,480){
\psshadowbox[linewidth=0.4pt]{
\psset{unit=1cm}
\begin{pspicture}(1.4,0.8)
\psline[linecolor=magenta](0.1,0.6)(0.5,0.6) \uput[r](0.5,0.6){RX}
\psline[linecolor=green](0.1,0.2)(0.5,0.2) \uput[r](0.5,0.2){TX}
\end{pspicture}
}
}
\end{psgraph}
% }
\caption{Diagramm mit der \textttl{psgraph}-Umgebung von \textsl{PSTricks}}\label{fig:pstricks-psgraph}
\end{figure}
\end{document}
Für die Addition der beiden Messreihen habe ich keine Idee. Da hilft vielleicht der Hinweis von Matthias weiter. Oder Du machst es mit einer Tabellenkalkulation und speicherst die Daten wieder in mehren Spalten. Dann kannst Du den Plot ja nachträglich in das Diagramm einfügen.

Die Beschriftung der zweiten y-Achse kannst Du dir eigentlich sparen, wenn die beiden Messreihen ähnliche Größenordnungen derselben Einheit haben. Sowas macht man eigentlich nur bei einer Messreihe, die in verschiedenen Einheiten dargestellt werden soll. Mir fällt dazu gerade die Temperatur ein, die man einerseits in Grad Celsius und andererseits in Kelvin aufträgt. Man hat nur eine Kurve und zwei verschiedene Einheiten. In deinem Fall ist es aber umgekehrt. Deshalb schlage ich die Verwendung einer Legende vor, die Du am besten in einer der Ecken des Graphen platzierst.


MfG
Thorsten

voss
21-11-2007, 23:55
Hallo zusammen.
Ich stehe vor folgendem Problem. Ich wollte mit PSTricks mehrere Plots machen. Die Daten habe ich in einer Datei (also die X und Y-Werte). Dieses Diagramm soll die Geschwindigkeit einer Netzwerkkarte in Abhängigkeit von der Paketgröße darstellen. Soweit kein Problem.
Erste Frage:
Ich wollte im gleichen Diagramm die CPU-Last in Abhängigkeit der Paketgröße darstellen. Daher muss die Beschriftung der Y-Achse auf der linken Seite für die Datendurchsatz in MBit/s sein und auf der rechten Y-Achse soll die CPU-Last von 0-100% sein. Ist das möglich, wenn ja wie?

Zweite Frage:
Ist es möglich mehere Messreihen zusammenzuzählen? Sprich ich habe eine Datei, die meinetwegen so aussieht

Wobei die erste Spalte die Paketgröße ist, die zweite die TX Geschwindigkeit und die dritte die RX Geschwindigkeit. Jetz möchte ich daraus automatisch einen dritten Plot erzeugen wo RX und TX addiert wurden. Ist das irgendwie möglich, oder muss ich das vorher selber alles in Excel oder so machen?



\begin{filecontents*}{multi.dat}
1 310 290
2 320 280
4 325 275
8 330 272
16 332 270
32 340 268
\end{filecontents*}
\documentclass{minimal}
\usepackage{pstricks-add}

\begin{document}

\psset{llx=-1.2cm,lly=-1cm,urx=1mm,ury=1mm}
\readdata{\data}{multi.dat}
\begin{psgraph}[Dx=10,Dy=100,subticks=5,ticksize=0pt 4pt](0,0)(0,0)(40,700){10.5cm}{7.5cm}
\listplot[linecolor=magenta,linewidth=1.5pt,plotNoMax=2,plot No=1]{\data} % erste Messreihe
\listplot[linecolor=green,linewidth=1.5pt,plotNoMax=2,plotNo =2]{\data} % zweite Messreihe
\makeatletter
\pst@def{ScalePoints}<
/y ED /x ED
counttomark dup dup cvi eq not { exch pop } if
/m exch def /n m 3 div cvi def
n {
add y mul m 1 sub 1 roll
x mul m 1 sub 1 roll
/m m 3 sub
def } repeat>
\makeatother
\listplot[linecolor=blue,linewidth=1.5pt]{\data} % zweite Messreihe
\end{psgraph}

\end{document}

Herbert