2017-04-21 1 views
0

J'essaye de tracer quelques données d'un dossier qui contient un timestamp et des commentaires comme chaîne et diverses autres données. Ce qui m'inquiète jusqu'ici est de tracer tous les commentaires comme étiquette avec l'heure, mais je cherche une sorte d'espacement intelligent, de sorte que les commentaires ne se chevauchent pas.Gnuplot traçant des points étiquetés avec la distance changeante

Je cherche aussi un moyen de filtrer les commentaires. J'ai une autre colonne qui spécifie si le commentaire est censé être caché ou non. J'utilise ce pour conditional plotting statment:

plot 'data' using $1:0:($7==0?$6:" ") 

C'est le filtrage des points de données, mais au lieu de montrer la chaîne dans (6 $), il est montre 0 si le statment est vrai.

Je pense que je peux contourner l'espacement en manipulant le temps à la main si la distance est trop petite, mais un filtre de travail serait d'une grande aide.

Est-ce que quelqu'un a traité ce genre de problème avant? J'ai ajouté une photo ci-dessous de mes progrès jusqu'à présent.

J'apprécie toutes les suggestions. Je vous remercie.

Plot

Répondre

0

Pour utiliser des champs de texte à l'intérieur d'une expression using, vous devez utiliser la fonction stringcolumn. Pour votre exemple, quelque chose comme

plot 'data' using $1:(0):($7==0 ? stringcolumn(6) : " ") with labels 

devrait fonctionner pour l'aspect filtrage de votre question.

+0

Fonctionne parfaitement! Avec l'étiquette conditionnelle, le tracé de l'espacement n'est plus aussi important puisque la quantité de commentaires est considérablement réduite. Merci beaucoup pour votre aide! –

0

Afin de rendre vos étiquettes se chevauchent pas, qu'en les faisant tourner vers le bas et de la route avec rotate by -60? La marge inférieure par défaut les couperait, auquel cas vous auriez besoin de l'étendre avec set bmargin 10.

Pour tracer de manière conditionnelle, vous devez générer une erreur numérique, et pas seulement une valeur nulle, lorsque la condition est fausse. La façon la plus simple pourrait être:

plot 'data' using $1:0:($7==0?$6:NaN) 

bien que dans les anciens scripts on voit souvent 1/0 utilisé pour générer le NaN, comme dans:

plot 'data' using $1:0:($7==0?$6:1/0) 

Au lieu de comploter conditionnelle, vous pouvez définir des étiquettes explicites, comme dans :

set xdata time 
set timefmt "%d/%m/%y\t%H%M" 
set format x "%d/%m\n%H:%M" 
set xrange [ "1/6/93":"1/11/93" ] 
set grid 
set style data fsteps 
set bmargin 10 
set label 1 'Look at the spike here' at '01/10/93',0.05 rotate by -45 point 
# https://github.com/gnuplot/gnuplot/blob/master/demo/timedat.dat 
plot 'timedat.dat' using 1:4 notitle 

Ce produit resulting plot

+0

D'une certaine manière, gnuplot n'aime pas la sortie de chaîne en combinaison avec le traçage conditionnel. Utiliser des étiquettes explicites est une bonne alternative, mais le nombre de commentaires va probablement augmenter. Merci pour votre réponse –