La version 5.2 de Gnuplot prend en charge les tableaux. Comme indiqué ici , on peut déclarer des tableaux 1D et les tracer
array A[100] do for [i=1:100] { A[i] = sin(2*pi*i/100.) + 0.1*rand(0) } plot A
4 Réponses :
L'astuce consiste à demander à gnuplot de générer un ensemble d'échantillons à tracer. Au lieu d'un nom de fichier, vous pouvez fournir la chaîne «+» pour générer un ensemble d'échantillons sur une dimension ou «++» pour générer un ensemble d'échantillons sur deux dimensions. Gnuplot appelle ces "noms de fichiers spéciaux". Dans votre cas, vous souhaitez générer 100 échantillons (entiers de 1 à 100) et utiliser chaque échantillon comme index dans vos tableaux.
array A[100] array B[100] do for [i=1:100] { A[i] = something B[i] = something else } plot sample [i=1:100] '+' using (A[i]):(B[i]) with linespoints
Le mot-clé "sample" garantit que le terme entre crochets ne sera pas mal interprété comme définissant la plage horizontale ("set xrange") du tracé.
Entrées de documentation
Bien que votre code puisse être corrigé comme réponse, mais en élaborant ce que fait votre code, cela peut améliorer la qualité de votre réponse. Consultez l'article: Comment rédiger une bonne réponse?
@Ethan: Est-il possible de ne pas utiliser le signe +
et de ne dessiner que des lignes. J'ai même essayé d'autres symboles, tels que *
, -
et x
. Aucun n'a fonctionné. Il semble que seul le symbole +
fonctionne.
@Asarkar, ce '+'
ci-dessus n'a rien à voir avec le symbole utilisé dans le tracé. Utilisez avec des lignes
au lieu de avec des points de ligne
. Consultez l ' aide
pour savoir comment modifier les lignes, les points, les couleurs, la largeur de ligne, la taille des points, etc.
@theozh, merci. Mais que fait alors le signe +
?
Dans gnuplot, j'ai également essayé d'utiliser help plot sample
. C'était Désolé, aucune aide pour 'plot sample'
. Donc, une petite explication du mot clé sample
et du signe +
serait utile.
Réponse n ° 2 Si les deux tableaux A et B sont garantis d'avoir la même taille, une commande de tracé plus simple est possible. Nous commençons par noter que toutes les commandes de tracé suivantes sont équivalentes.
plot A using (A[$1]):(B[$1])
En effet, aux fins du traçage d'un tableau A est traité comme fournissant deux colonnes d'informations, l'indice i (colonne 1 ) et la valeur A [i] (colonne 2). Suivant la syntaxe standard de gnuplot, chaque champ du spécificateur "using" d'une commande plot peut contenir soit un numéro de colonne nu, soit une expression entre parenthèses. Dans une expression, la valeur d'une colonne peut être référencée soit en préfixant un signe $ ou en utilisant la fonction colonne (i).
Dans cet esprit, il s'ensuit que la commande ci-dessous trace les valeurs de array B par rapport aux valeurs du tableau A.
plot A plot A using 1:2 plot A using (column(1)):(column(2)) plot A using ($1):($2) plot A using ($1):(A[$1])
Réponse n ° 3 Vous demandez s'il existe une alternative pour faire de A un tableau à 2 dimensions. Pas exactement, mais rappelez-vous que dans gnuplot, les nombres à virgule flottante sont en fait des valeurs complexes. Vous pouvez donc utiliser les composants réels et imaginaires de chaque A [i] pour le placer dans le plan x / y:
array A[36] set angle degree i = {0,1} # i = sqrt(-1) as a complex value do for [n=1:36] { A[n] = cos(real(10.*n)) + i * sin(real(10.*n)) } plot A using (real(A[$1])):(imag(A[$1])) with lp
Merci pour vos réponses. Je pense que je préfère la réponse 1 pour sa simplicité.
Y a-t-il une raison particulière pour laquelle vous voulez d'abord avoir des données dans des tableaux?
Lorsque vous remplissez vos tableaux avec des valeurs de fonctions, vous pouvez également tracer deux fonctions (ou comme vous dites deux colonnes d'un tableau 2D) directement l'une contre l'autre sans définir au préalable les tableaux dans un do for code> boucle.
Définissez simplement certaines fonctions et tracez-les les unes contre les autres.
Utilisez
set samples
pour définir le nombre de points et utilisez plot sample []
pour définir la plage. Je suppose que ce serait plus facile que de définir la taille du tableau, de faire la boucle et de "déconner" avec l'index i
et la plage et / ou les décalages.
### plot one function vs. another function reset session f(x) = sin(x) + 0.1*rand(0) g(x) = cos(x) + 0.1*rand(0) set samples 100 plot sample [0:2*pi] '+' u (f($1)):(g($1)) w lp pt 7 lc rgb "red" ### end of code
Actuellement, j'écris un module fortran pour appeler gnuplot pour le traçage en temps réel. J'ai d'abord pensé que passer des tableaux x et y serait utile. Cependant, cela crée un problème lorsque la commande replot est utilisée avec de nouvelles données d'entrée. Je dois donc enregistrer les données dans un fichier et les tracer.