Parcela sombreada en Matlab
Me gustaría trazar una función en Matlab con un área sombreada que indique la incertidumbre sobre ella (por ejemplo, intervalo de confianza). Esto se puede lograr utilizando la fillfunción para crear un parche de color. Por ejemplo
x = linspace(0, 2*pi, 100);
f = cos(x);
fUp = cos(x) + 1;
fLow = cos(x) - 1;
x2 = [x, fliplr(x)];
plot(x, f, 'k')
hold on
fill(x2, [f, fliplr(fUp)], 0.7 * ones(1, 3), 'linestyle', 'none', 'facealpha', 0.4);
fill(x2, [fLow, fliplr(f)], 0.7 * ones(1, 3), 'linestyle', 'none', 'facealpha', 0.4);
Esto crea un área gris sombreada entre las funciones fLowy fUp, fen el medio, representada como una línea negra sólida, como en la imagen de abajo.
Ahora me gustaría que el área sombreada degradara su color cuando nos acercamos al límite inferior (o superior) del intervalo de confianza. En particular, me gustaría que al acercarme a sus límites, el área sombreada se vuelva más y más brillante. ¿Hay una manera de hacerlo? Estoy haciendo dos parches separados porque creo que puede ser necesario para mi propósito.
Respuestas
Puede dividir su CI en nsubárea:
x = linspace(0, 2*pi, 100);
f = cos(x);
n = 20; % step number
g = 0.3; % grayscale intensity
fUp = cos(x) + linspace(0,1,n).';
fLow = cos(x) - linspace(0,1,n).';
x2 = [x, fliplr(x)];
plot(x, f, 'k')
hold on
fill(x2, [repmat(f,n,1), fliplr(fUp)], g * ones(1, 3), 'linestyle', 'none', 'facealpha', [1/n]);
fill(x2, [fLow, repmat(fliplr(f),n,1)], g * ones(1, 3), 'linestyle', 'none', 'facealpha', [1/n]);
Que producen:
Las subáreas se superponen y producen un máximo facealpha de n*(1/n) * g = g
Se dio cuenta de que este método no es realmente eficiente en la memoria (ya que produce nsubáreas en cada lado) y solo funciona con un sombreado lineal.
Si su CI no es lineal, debe ajustar esta parte:
% Prediction Linear CI
% ↓ ↓
cos(x) + linspace(0,1,n).';
cos(x) - linspace(0,1,n).';
a
% Prediction Non linear CI
% ↓ ↓
cos(x) + your_non_linear_CI_distribution;
cos(x) - your_non_linear_CI_distribution;