Pregunta

Tengo un conjunto de puntos de datos "de" la definición de una curva que quiero parcela con curva suave.Así que quiero llenar el área debajo de la curva entre algunos de los pares de valores de x.Si sólo había un par de valores de x no es tan difícil porque yo definir un nuevo conjunto de datos y parcela con filledcu.Ejemplo:

example of what I want to do

El problema es que quiero hacer que varias veces en la misma parcela.

Editar:Mínima de trabajo ejemplo:

#!/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

Donde la estructura de 'datos' es:

x_point y_point

Y me di cuenta de que mi problema es que en realidad no puede llenar ni una sola curva, parece estar lleno porque la pendiente es casi constante.

¿Fue útil?

Solución

Para llenar las partes de debajo de una curva, se debe utilizar el filledcurves de estilo.Con la opción x1 rellenar la parte entre la curva y el eje x.

Con el fin de llenar sólo las partes de la curva, se debe filtrar los datos, es decir,dar los valores de x un valor de 1/0 (punto de datos no válidos) si están fuera del rango deseado, y el valor correcto a partir de los datos de archivo de otro modo.Al final se hace una gráfica de la curva:

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'

Esto llena el rango [-1:0.5] y [0.2:0.8].

Para dar un ejemplo de trabajo, yo uso el especial de nombre de archivo +:

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'

Con el resultado (con 4.6.4):

enter image description here

Si debe usar algún tipo de suavizado, el filtro puede afectar la curva de los datos de manera diferente, dependiendo de los filtros de la parte.Usted puede escribir primero el alisado de datos a un archivo temporal y, a continuación, utilizar este para 'normal' de trazado:

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'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top