2017-09-20 3 views
0

J'ai une question très longue et probablement très intimidante. J'ai un fichier trial.csv qui ressemble à ceci:Tracer dans un script shell en utilisant gnuplot

ForceX ForceY Temp Speed Theta Height 
9.724 10.504 88.041 0.7  1  1100 
13.938 10.841 99.918 0.7  2  1100 
8.771 10.719 75.8  0.8  1  1100 
12.71 11.027 85.214 0.8  2  1100 

Pour chaque valeur de la vitesse, il y a deux ensembles de valeurs pour ForceX, FORCEY, Temp et Theta. Je voudrais tracer ForceX contre Theta pour la vitesse = 0.7 et pour la vitesse = 0.8. Maintenant, c'est facile s'il n'y a que deux valeurs thêta et je peux utiliser plot "<(sed -n '2,3p' trial.csv)" using 2:1 with linespoints title "" pour les vitesses respectives. Mais la valeur thêta varie de -2 à +2 et la vitesse va de 0,6 à 0,9. Alors maintenant j'ai 5 ensembles de valeurs pour chaque vitesse. (Le fichier trial.csv est généré en utilisant une boucle 'for' en utilisant la vitesse comme boucle externe et Theta comme boucle interne).

Comment tracer la plage de ForceX avec Theta pour chaque valeur de vitesse dans un tracé séparé? Je suis assez nouveau pour les scripts shell et je n'ai pas trouvé de solution appropriée depuis environ une semaine maintenant. J'espère que mon problème est clair. Votre aide est appréciée. Merci.

Cordialement, Sou

Répondre

0

Il n'y a pas besoin d'utiliser des scripts shell, vous pouvez le faire beaucoup plus facile avec la directive using de terrain gnu. Par exemple, pour tracer ForceX contre Theta pour que les enregistrements où Speed est de 0,7, utilisez

plot "trial.csv" u 5:($4 == 0.7 ? $1 : 1/0) title "Speed 0.7" w lp 

Si vous voulez tracer des courbes pour plusieurs valeurs de Speed essayer

plot for [speed in "0.7 0.8"] "trial.csv" u 5:($4 == speed ? $1 : 1/0) title "Speed ".speed w lp 
+0

Merci pour la réponse: DI trouvé un travail pour cela. –