4 Réponses :


2
votes

hmmm ... ok, j'ai quelque chose: xxx

... Mais cela ressemble plus à "Capture" une variable, que la lecture ( comme la fonction Initer est utilisé pour analyser un flux de nombres, détecter le premier et renvoyer sa valeur ) :) J'espère qu'il y a une meilleure façon de le faire ... < / p>


0 commentaires

6
votes

Deux manières:

1. Tracez d'abord la fonction et laissez Gnuplot à indiquer la valeur minimale x: xxx

2. Utilisez un script externe pour déterminer quelle est la valeur minimale x: xxx


3 commentaires

Impressionnant - Merci beaucoup pour la réponse concise, @sunhwan Jo - Cheers!


Oui, mais si vous êtes si vous êtes intéressé par l'élément premier de la série de données, ce qui n'a pas nécessairement besoin d'être le minimum?


@Tmottm Ensuite, vous devez ajuster le script externe pour utiliser uniquement le premier élément (en utilisant AWK directement sans la partie de tri).



3
votes

OK, je continue de revenir à cela - je pense donc que j'avais besoin de la clarification suivante ici:

étant donné que gnuplot , eh bien, termine les jeux de données comme des parcelles 2D - c'est un étant donné qu'il est en quelque sorte traite des structures 2D ou des tableaux. C'est pourquoi quelqu'un qui vient de C, Perl, Python, etc. penserait naturellement qu'il est possible d'indexer une manière d'une manière ou d'une manière à ne pas extraire une valeur à une position de rangée et de colonne donnée; Dites, quelque chose comme le pseudocode suivant: xxx

ou alternativement, pseudocode:

my_dataset = parse_dataset ("inline.dat")
my_val = get_value (my_dataset, 1, 2)

et j'ai passé une tonne de temps à chercher quelque chose comme celui-ci dans gnuplot , et je ne trouve rien de tel (une variable directe accès aux valeurs de jeu de données via la ligne et Index de la colonne). Il semble que la chose seule une chose que l'on puisse faire, c'est tracé le jeu de données - et éventuellement des valeurs d'accès là-bas, via une fonction appelée dans la partie .

Cela signifie que si je veux trouver des valeurs de jeu de données de gnuplot , je avez à itérer via le jeu de données en appelant tracé < / Code> - Même si j'ai besoin de ces valeurs précisément pour construire un énoncé correct :) et je n'aime pas goûter cela, pensant que le premier Terrain peut en quelque sorte bousiller le second ensuite :) Toutefois, comme Recherche de la valeur maximale dans un ensemble de données et soustrayez de la parcelle - Comp.Graphics.apps.gnuplot | Groupes Google souligne, un peut (code> à un fichier, également stdout ou / dev / null , et obtenez une table formatée ASCII plaine - donc au moins, je peux rediriger le premier appel de cette manière, de sorte qu'il n'interfère pas avec le terminal de traçage réel du deuxième appel à tracé .

Donc, ci-dessous est un autre exemple de code, où le premier élément de la première colonne dans le jeu de données " inline.dat " est récupéré via: xxx < / Pre>

... Alors, la parcelle peut être décalée par d'abord directement dans l'appel appel.

Remarque à nouveau que impression_dataseet_row_column appelle traque (redirigé via Table de réglage sur / dev / null / dev / null ) - Et en tant que tel, chaque temps vous appelez à la récupération d'une valeur , il provoquera une itération via le jeu de données entier ! Donc, si vous avez besoin d'un premier élément et d'un dernier élément (et éventuellement d'autres choses, comme Certaines statistiques de base avec GNUPLOT ), il est probablement préférable de réécrire print_dataset_row_column de sorte que cela récupère tous ceux-ci.

Aussi un print_dataseet_row_column La réécriture serait nécessaire si vous utilisez des formats spéciaux dans votre ensemble de données et le à l'aide de la ligne . Notez que dans cet exemple, la troisième colonne est une chaîne - qui n'est pas par défaut acceptée comme colonne de données de tracé; Et en tant que telle, les appels vers les fonctions print_dataset _ * échoueront s'ils doivent faire face à cela (voir aussi gnuplot tracé de la chaîne ).

Voici donc le code exemple - appelons-le test.gp : xxx

Lorsque ce script est appelé, le jeu de données de l'OP est transféré déplacé, à partir de 0 - et les éléments suivants sont sortis dans la borne (les premières impressions de la table sont la réalité. Sortie de TRACE redirigé via Table de réglage à stdout ): xxx


0 commentaires

3
votes

Pour lire une seule valeur à partir d'un fichier de données Considérez la fonction définie par l'utilisateur suivant:

at(file, row, col)=system( sprintf("%s | grep -v '^#\\|^$' | awk -v row=%d -v col=%d 'NR == row {print $col}'", (file[:1] eq '<') ? file[2:] :'cat '.file, row, col) )


1 commentaires

Merci pour cela, @hannes - approche pratique pour garder à l'esprit. À votre santé!