2012-04-01 2 views
0

Amis, j'ai une grande quantité de données à imprimer sur un graphe en utilisant gnuplot. Comme le nombre de points dans le graphique est trop grand, j'utilise une méthode d'interpolation de données cspline pour lisser les données. Mais la méthode d'interpolation ignore certaines valeurs aberrantes qui peuvent être importantes dans l'analyse des performances du programme. Comment dois-je m'assurer que les valeurs aberrantes extrêmes (valeurs différant de plus de x) ne sont pas ignorées par la fonction gnuplot.Méthode d'interpolation de données gnuplot pour le lissage des données

Voici le code que j'utilise pour générer des graphiques.

plot data_file binary format='%uint64 %double %double %double' using 1:2 smooth csplines title "Kernel hit-rate" with lines, \ 
data_file binary format='%uint64 %double %double %double' using 1:3 smooth csplines title "User hit-rate" with lines, \ 
data_file binary format='%uint64 %double %double %double' using 1:4 smooth csplines title "Overall hit-rate" with lines 

Les graphiques générés sont donnés ci-dessous:

With CSplines

Without CSplines

Je veux GNUplot à des points que se lisser ils ne sont pas trop loin (un paramètre configurable) ?? Aussi pouvez-vous suggérer n'importe quel autre outil de traçage qui peut faire ce que j'ai besoin ??

+0

S'il vous plaît ne vont pas dans la sémantique du graphe. –

+1

Je suis confus, est le premier complot avec csplines et le deuxième complot sans? Si oui, qu'essayez-vous exactement d'accomplir avec csplines (c'est-à-dire quel est le problème avec le deuxième graphique?) – mgilson

+0

(1) Le premier tracé est avec csplines et la deuxième partie est sans csplines. (2) Comme vous pouvez le constater, dans le second graphique, nous pouvons voir des valeurs y allant de 0,8 à 0,9. Malheureusement, le pic du premier graphique pour la gamme x autour (5000) est d'environ 0,1 –

Répondre

2

vous pourriez probablement accomplir ceci avec une combinaison de magie de coquille et set table. Par exemple:

set samples 200 #How many points will be used in interpolating the data... 
YLIMIT=.5 #for example 
set table 'junkfile1.dat' #This holds the "smooth" portion 
plot 'data_file' binary format='%uint64 %double %double %double' using 1:($2<YLIMIT ? $2: 1/0) smooth csplines 
unset table    #This holds the "spurious" portion 
set table 'junkfile2.dat' 
plot 'data_file' binary format='%uint64 %double %double %double' using 1:($2>YLIMIT ? $2: 1/0) 
unset table 

plot '< sort -n -k 1 junkfile1.dat junkfile2.dat' u 1:2 with lines 
!rm junkfile1.dat junkfile2.dat #cleanup after ourselves 

(non testé)

+0

problème est que le tri et d'autres fonctions fonctionnent uniquement sur les données ASCII et non sur le jour binaire. J'essaie de modifier le format graphique et de vérifier avec le code ci-dessus. –

+1

Faites-vous référence à 'plot ' mgilson

+0

J'ai essayé la méthode ci-dessus. il fonctionne pour les petites entrées mais pour les plus grandes entrées, il se bloque en affichant une erreur de mémoire pour la table. –

Questions connexes