2017-05-31 1 views
1

Je souhaite visualiser les données fournies à certains horodatages à partir de plusieurs sources le long d'une ligne temporelle. Par exemple, avec le follwing de fichiers d'entrée avec la colonne 1 étant l'estampille temporelle et de la colonne 2 données:Alignement de valeurs avec horodatage sur une ligne temporelle

O1.dat:

100 5 
300 10 

O2.dat:

200 7 
400 3 

Parallèlement à cela la moyenne de toutes les valeurs sont échantillonnées à des intervalles:

Avg.dat:

250 6.5 
500 6.25 

Je voudrais tracer toutes les valeurs d'une manière semblable à la table il ressemble à quelque chose comme ça, avec les valeurs alignées au temps sur le dessus:

enter image description here

Mes données réelles atteint horodatages jusqu'à 10000, donc quelque chose de dynamique serait bien. Jusqu'ici, je ne faisais que tracer de simples parcelles en ligne ou en ligne, donc je ne sais pas comment procéder.

Merci pour votre temps.

EDIT:

C'est ce qu'il ressemble à ce jour avec des ajustements apportés à la réponse acceptée:

enter image description here

Il y a encore un certain chevauchement, mais qui est tout simplement à cause des données étant trop près les uns des autres. Le script utilisé pour cela:

#set term pdf 
#set term pdf size 8, 5 
#set output 'out.pdf' 
set term png 
set term png size 1200, 700 
set output 'out.png' 

set termoption font ",20" 
set label 'Time (ms)' at graph 0, graph 1 offset -0.75, char 1 right 
unset border 
unset key 
unset xtics 
set ytics scale 0 
set x2tics() scale 0 
set yrange [0:5.5] 
set x2range[0:10000] 
set lmargin 9 

set arrow from graph -0.15, graph 1 to graph 1.1, graph 1 nohead 
set arrow from graph -0.01, graph 1.2 to graph -0.01, graph -0.2 nohead 
set arrow from graph -0.15, first 0.3 to graph 1.1, first 0.3 nohead 

set style data labels 
plot for [i=0:9] 'desc'.i.'.txt' using 1:(5-0.5*i):(sprintf('%d', $2)):ytic('Object '.i) axes x2y1, \ 
    'Avg.dat' using 1:(0):(sprintf('%d', $2)):ytic('Avg') axes x2y1 

Répondre

2

La partie simple conventionnelle consiste à tracer les données réelles. Pour cela, vous pouvez utiliser le style de traçage labels. Un exemple très simple serait:

set xtics (0) 
set xrange [0:*] 
set offsets graph 0, graph 0.2, graph 0.2, graph 0.2 
set style data labels 
unset key 
plot 'O1.dat' using 1:(5):(gprintf('%g', $2)):ytic('O1'),\ 
    'O2.dat' using 1:(4):(gprintf('%g', $2)):ytic('O2'),\ 
    'Avg.dat' using 1:(3):(gprintf('%g', $2)):ytic('Avg'):xtic(1) 

qui trace simplement les valeurs de vos fichiers de données que les étiquettes aux x positions données dans les premières colonnes. Les positions des y sont définies comme des numéros fixes:

enter image description here

Pour déplacer les étiquettes de XTICK vers le haut et ont des lignes ressemblant à la table dont vous avez besoin d'un peu plus de peaufinage:

reset 

set termoption font ",20" 
set label 'Object' at graph 0, graph 1 offset -1, char 1 right 
unset border 
unset key 
unset xtics 
set ytics scale 0 
set x2tics() scale 0 format "%g" 
set yrange [2:5.5] 
set x2range[0:*] 
set lmargin 8 

set arrow from graph -0.15, graph 1 to graph 1.1, graph 1 nohead 
set arrow from graph 0, graph 1.2 to graph 0, graph 0 nohead 
set arrow from graph -0.15, first 3.25 to graph 1.1, first 3.25 nohead 

set style data labels 
plot 'O1.dat' using 1:(5):(sprintf('%d', $2)):ytic('O1') axes x2y1,\ 
    'O2.dat' using 1:(4):(sprintf('%d', $2)):ytic('O2') axes x2y1,\ 
    'Avg.dat' using 1:(2.5):(gprintf('%g', $2)):ytic('Avg'):x2tic(1) axes x2y1 

Une telle disposition de table n'est pas une tâche typique, vous devez donc adapter plusieurs paramètres à votre résultat final. L'impact principal provient de la taille de la toile, de la police et de la taille de la police.

enter image description here

Si vous avez plus de ces deux fichiers que vous pouvez bien sûr aussi itérer sur une liste de fichiers.

+0

C'était parfait, merci beaucoup. J'ai édité ma question avec le résultat actuel. Il y a encore quelques ajustements à faire, mais ça a l'air plutôt bien. – BananaBuster