gnuplot stocker un numéro de fichier de données dans la variable
OSX v10.6.8 et Gnuplot v4.4
J'ai un fichier de données avec 8 colonnes. Je voudrais profiter de la première valeur de la 6e colonne et d'en faire le titre. Voici ce que j'ai à ce jour:
#m1 m2 q taua taue K avgPeriodRatio time
#1 2 3 4 5 6 7 8
K = #read in data here
graph(n) = sprintf("K=%.2e",n)
set term aqua enhanced font "Times-Roman,18"
plot file using 1:3 title graph(K)
Et voici ce que les premières lignes de mon fichier de données ressemble à:
1.00e-07 1.00e-07 1.00e+00 1.00e+05 1.00e+04 1.00e+01 1.310 12070.00
1.11e-06 1.00e-07 9.02e-02 1.00e+05 1.00e+04 1.00e+01 1.310 12070.00
2.12e-06 1.00e-07 4.72e-02 1.00e+05 1.00e+04 1.00e+01 1.310 12070.00
3.13e-06 1.00e-07 3.20e-02 1.00e+05 1.00e+04 1.00e+01 1.310 12090.00
Je ne sais pas comment lire correctement dans les données ou si c'est même la bonne façon d'aller à ce sujet.
EDIT #1
Ok, merci pour mgilson j'ai maintenant
#m1 m2 q taua taue K avgPeriodRatio time
#1 2 3 4 5 6 7 8
set term aqua enhanced font "Times-Roman,18"
K = "`head -1 datafile | awk '{print $6}'`"
print K+0
graph(n) = sprintf("K=%.2e",n)
plot file using 1:3 title graph(K)
mais j'obtiens l'erreur: Non numérique de la chaîne où une expression numérique a été prévu
EDIT #2
file = "testPlot.txt"
K = "`head -1 file | awk '{print $6}'`"
K=K+0 #Cast K to a floating point number #this is line 9
graph(n) = sprintf("K=%.2e",n)
plot file using 1:3 title graph(K)
Cela donne l'erreur--> tête: file: Aucun fichier ou répertoire
"testPlot.gnu", ligne 9: Non numérique de la chaîne où une expression numérique a été prévu
OriginalL'auteur whatsherface | 2012-06-26
Vous devez vous connecter pour publier un commentaire.
Vous avez un peu d'options...
PREMIÈRE OPTION:
utilisation
columnheader
Je ne l'ai pas testé, mais cela peut empêcher la première ligne du fait d'être tracée.
DEUXIÈME OPTION:
utiliser un utilitaire externe pour obtenir le titre:
Si la variable est numérique, et que vous souhaitez reformater, dans gnuplot, vous pouvez convertir des chaînes de caractères d'un type numérique (entier/flottant) en ajoutant 0 (e.g).
Ensuite, vous pouvez la formater avec
sprintf
ougprintf
que vous êtes déjà en train de faire.C'est bizarre qu'il n'y a pas de
float
fonction. (int
de travailler si vous voulez jeter un entier).MODIFIER
Le script ci-dessous a fonctionné pour moi (quand j'ai collé votre exemple de données dans un fichier appelé "fichier"):
EDIT 2 (les adresses en commentaires ci-dessous)
Pour développer une variable dans backtics, vous aurez besoin de macros:
À répondre à votre question 2, c'est une bonne idée de vous familiariser avec shell utilitaires-sed et awk peut à la fois faire. Je vais vous montrer une combinaison de la tête ou de la queue:
devrait fonctionner.
MODIFIER 3
J'ai appris récemment que dans gnuplot,
system
est une fonction en tant que bien comme une commande. Pour faire ci-dessus, sans tous les backtic gymnastique,Wow, beaucoup mieux.
Vous êtes à l'aide d'un double-quote
"
où vous devriez être à l'aide d'un backtic (situé sur le même bouton que ~ sur un clavier Américain)Et sur la poursuite de l'inspection -- j'ai remarqué qu'il me manquait mes guillemets...
Ok, j'ai corrigé maintenant. Juste pour être sûr, il devrait y avoir des guillemets et backtics, est-ce correct? Quand je le lance il me donne toujours l'erreur: Non numérique de la chaîne où une expression numérique qui était attendu en se référant à la ligne 6 (impression K+0). Cela semble indiquer qu'il ne va pas me laisser convertir une chaîne à un type numérique?
Il fonctionne pour moi (voir mon edit pour exactement le code que j'ai utilisé). (gnuplot 4.4.2, OS X)
OriginalL'auteur mgilson
C'est une très vieille question, mais voici une belle façon d'obtenir l'accès à une seule valeur de n'importe où dans votre fichier de données et l'enregistrer en tant que gnuplot-accessible variable:
La
index
nombre permet de résoudre un ensemble de données (séparées par des retours chariot deux), tandis queevery
vous permet de spécifier une ligne en particulier.L'séparés par deux points, les chiffres après
every
doit être de la forme1:1:<line_number>:<block_number>:<line_number>:<block_number>
, où le numéro de la ligne est la ligne avec le bloc (à partir de 0), et le numéro de bloc est le numéro du bloc (séparés par un retour chariot, à partir de 0). La première et la deuxième chiffres disent chaque parcelle 1 lignes et chaque bloc de données, et les troisième et quatrième dire commencer à partir de la ligne de<line_number>
et de bloquer<block_number>
. Les cinquième et sixième dire où s'arrêter. Cela vous permet de sélectionner une seule ligne n'importe où dans votre fichier de données.La dernière partie de l'intrigue de commande affecte la valeur dans une colonne particulière (dans ce cas, colonne 1) à votre variable (
var
). Il doit y avoir deux valeurs pour une parcelle de commande, j'ai donc choisi la colonne 1 de complot contre ma variable instruction d'affectation.OriginalL'auteur KDN
Ici est moins 'awk'-ward solution qui affecte la valeur de la première ligne et de la 6e colonne du fichier 'Data.txt" pour la variable x16.
Plus générale exemple pour stocker plusieurs valeurs est donnée ci-dessous:
OriginalL'auteur StackJack