En varias ocasiones tuve la necesidad de crear una curva de distribución normal llena para usar en presentaciones, capacitación y publicación. Tan común y tan importante como es la distribución normal, pensaría que podría encontrar esto fácilmente como una forma estándar o mediante una búsqueda en Internet, pero no he tenido mucha suerte en encontrar lo que necesitaba.
JMP tiene algunas buenas maneras de dibujar líneas y formas geométricas en diagramas usando scripts gráficos. Si quiero una forma que se vea así

Una forma de hacerlo es crear vectores con los puntos de coordenadas que definen un polígono, usando la función de distribución normal, y luego, en la secuencia de comandos de gráficos, usar eso como argumento para la función Polygon ().
La función que se muestra a continuación hace exactamente eso y devuelve una expresión evaluada que se puede usar en un script gráfico
func_VNormalShape = Function( // create a polygon that looks like a vertically oriented normal distribution
{_xloc, _yloc, _xscale = 1, _yscale = 1, _range=3, _scaleres=10},
{_VNormShapeX, _VNormShapeY},
// _xloc, _yloc is the "origin" for the normal curve (centered on Yloc, base of curve at xloc)
// _xscale is the scale magnification in the x-axis direction
// _yscale is the scale magnification in the y-axis direction
// range is the +/- range (in standard deviation) to draws the curve over
// scalres is the number of points per _yscale to use for determining the polygon. 10 generally works well, but if range is set to be large
// then scale_res should probably be increased.
// create a vector of y values to use for plotting the shape
_VNormShapeY = ((_yloc - _range * _yscale) :: (_yloc + _range * _yscale) :: (_yscale / _scaleres))`;
// create the filled polygon boundary points
_VNormShapeX = V Concat(
J( _range*2*_scaleres + 1, 1, _xloc ),
_xloc + Sqrt( 2 * Pi() ) * _yscale * _xscale * Normal Density( Sort Descending( _VNormShapeY ), _yloc, _yscale )
);
_VNormShapeY = V Concat(
_VNormShapeY,
Sort Descending( _VNormShapeY )
);
// substitute into the Polygon(function) the two vectorw with the boundary point X and Y values
// and evaluate the function
Eval( Substitute( Expr( Polygon( Expr( shape_x ), Expr( shape_y ) ) ), Expr( shape_x ), _VNormShapeX, Expr( shape_y ), _VNormShapeY ) );
); y luego esa función se puede usar dentro de la función Cuadro de gráfico () como se muestra a continuación (que crea la curva normal rellena que se muestra arriba).
_nw = New Window( "Vertical Normal Distribution",
_ob = Outline Box("Gray Vertical Filled Normal Distribution",
_hlb = H List Box(
_gb = Graph Box(
X Scale( 0, 1.1 ),
Y Scale( 1, 8 ),
Xname( "" ),
Yname( "" ),
Fill Color( "gray" );
func_VNormalShape( 0, 4.5, 1, 1, 3.4, 8 );
)
)
)
);
El mismo enfoque podría aplicarse a otras distribuciones de probabilidad.