Question

J'ai un ensemble de points de données"," définition d'une courbe que je veux tracer avec de bézier lisse.Je tiens donc à remplir la zone en dessous de la courbe entre certaines paires de valeurs de x.Si je n'avais qu'une paire de valeurs de x, il n'est pas difficile parce que je définir un nouvel ensemble de données et de tracer avec filledcu.Exemple:

example of what I want to do

Le problème est que je veux le faire plusieurs fois dans la même parcelle.

Edit:Minimes de travail exemple:

#!/usr/bin/gnuplot
set terminal wxt enhanced font 'Verdana,12'

set style fill transparent solid 0.35 noborder
plot 'data' using 1:2 smooth sbezier with lines ls 1
pause -1

Si la structure de données " est:

x_point y_point

Et j'ai réalisé que mon problème en fait est que je ne peux pas remplir même pas une courbe, il semble être rempli car la pente est presque constant il.

Était-ce utile?

La solution

Pour remplir les pièces ci-dessous une courbe, vous devez utiliser le filledcurves style.Avec l'option x1 vous remplissez la partie comprise entre la courbe et l'axe des abscisses.

Afin de remplir uniquement les parties de la courbe, vous devez filtrer vos données, c'est à diredonner les valeurs de x d'une valeur de 1/0 (point de données non valides) s'ils sont en dehors de la plage souhaitée, et la valeur correcte du fichier de données autrement.À la fin de vous tracer la courbe elle-même:

set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot 'data' using (filter($1, -1, -0.5)):2 with filledcurves x1 lt 1 notitle,\
     ''  using (filter($1, 0.2, 0.8)):2 with filledcurves x1 lt 1 notitle,\
     ''  using 1:2 with lines lw 3 lt 1 title 'curve'

Cela remplit la gamme [-1:0.5] et [0.2:0.8].

Pour donner un exemple, j'ai utiliser le nom de fichier +:

set samples 100
set xrange [-2:2]
f(x) = -x**2 + 4

set linetype 1 lc rgb '#A3001E'

set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot '+' using (filter($1, -1, -0.5)):(f($1)) with filledcurves x1 lt 1 notitle,\
     ''  using (filter($1, 0.2, 0.8)):(f($1)) with filledcurves x1 lt 1 notitle,\
     ''  using 1:(f($1)) with lines lw 3 lt 1 title 'curve'

Avec le résultat (avec 4.6.4):

enter image description here

Si vous devez utiliser une sorte de lissage, le filtre peut affecter les données de la courbe de différentes manières, selon les filtré de la partie.Vous pouvez d'abord écrire le lissage des données dans un fichier temporaire, puis de les utiliser pour "normal" complot:

set table 'data-smoothed'
plot 'data' using 1:2 smooth bezier
unset table

set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot 'data-smoothed' using (filter($1, -1, -0.5)):2 with filledcurves x1 lt 1 notitle,\
     ''  using (filter($1, 0.2, 0.8)):2 with filledcurves x1 lt 1 notitle,\
     ''  using 1:2 with lines lw 3 lt 1 title 'curve'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top