2010-10-31 26 views
2

Je voudrais tracer une série de lignes verticales dans gnuplot à un intervalle donné.Script Gnuplot, pour une boucle à l'intérieur ou à l'intérieur d'une parcelle existante

Quelques informations sur l'intrigue.

Le tracé est principalement des données provenant d'un fichier .dat. Le script gnuplot est appelé par un script bash qui modifie le script de gnu plot en utilisant sed. C'est un snipit du vieux script bash (moche, j'en suis sûr).

sed -i 's/C = CONCEHOLD/C = '${$CO}'/g' $GNUPLOTROOT/plotviscosity.plt 
gnuplot $GNUPLOTROOT/plotviscosity.plt 
mv my-plot.ps $VISCPLOTNAME 
sed -i 's/C = '${$CO}'/C = CONCEHOLD/g' $GNUPLOTROOT/plotviscosity.plt 

avec le. fichier plt ressemblant à ceci. Je souhaite ajouter à ce tracé une série de lignes verticales à un intervalle répété défini. J'ai trouvé comment tracer des lignes verticales via http://t16web.lanl.gov/Kawano/gnuplot/parametric-e.html

set parametric 
const=3 
set trange [1:4] 
set xrange [0:5] 
set yrange [0:5] 
plot const,t 

je voudrais avoir

const=repititionperiod*i 

où i est un entier appartenant à (1, calculateduppedlimit].

I pouvait entrée repititionperiod via Sed à nouveau et dans un vain calculuppedlimit similaire, mais besoin d'une sorte de boucle pour soit dans gnuplot ou un script gnuplot séparé qui ajoute une ligne verticale à la parcelle déjà créée dans une boucle for dans mon script bash

Je ne trouve aucune information sur les boucles dans le gnu plot ou l'ajout à un tracé précédemment créé.

Tout conseil reçu avec gratitude.

Répondre

3

EDIT: Gnuplot fait maintenant, en fait, prend désormais en charge une boucle, vous pouvez lire à ce sujet here

Comme je comprends gnuplot ne dispose pas d'une boucle, mais vous pouvez générer une sorte de la façon suivante :

Faire un fichier "loop.gp" contenant

const = const + 1 
#... some gnuplot commands ... 
if(const<100) reread 

puis dans un terminal gnuplot ou écriture de script,

const = 3; load "loop.gp"; 

Cela vous donnera une boucle simple.

(cet exemple est tiré de la section de http://t16web.lanl.gov/Kawano/gnuplot/index-e.html misc.)

Pour votre réponse particulière, vous pouvez essayer d'ajouter des flèches plutôt que des lignes paremetric, par exemple.

set arrow from const,1 to const,4 nohead 

fera à peu près la même chose.

Dans ce cas, vous bouclez.gp pourrait être

const = const + repititionperiod 
#... some gnuplot commands ... 
set arrow from const,1 to const,4 nohead 
if(const<calculatedupperlimit) reread 

et que vous souhaitez vous lancer en boucle avec

const = 1; repititionperiod=2;calculatedupperlimit = 10; load "loop.gp"; replot; 

Le replot trace les flèches. Si vous "voulez" juste les lignes et rien d'autre - alors vous aurez besoin d'alimenter un graphique pour tracer réellement (un ensemble de flèches ne compte pas). L'exemple que vous avez donné pourrait alors être utilisé pour tracer la première ligne verticale.

espérons que cela aide.

Tom