Problème
Je voulais créer cette figure pour une publication

Solution
Pour créer les courbes normales ombrées/remplies et tronquées orientées verticalement, j'ai utilisé la fonction graphique Polygon().Le défi consistait à pouvoir facilement et à plusieurs reprises créer ce polygone à l'échelle et situé de manière appropriée sur un graphique.Je l'ai fait en utilisant cette fonction
func_VNormalShape = Function( // create a polygon that looks like a vertically oriented normal distribution
{_xloc, _yloc, _xscale = 1, _yscale = 1},
{_VNormShapeX, _VNormShapeY},
// create a vector of y values to use for plotting the shape
_VNormShapeY = ((_yloc - 3 * _yscale) :: (_yloc + 3 * _yscale) :: (_yscale / 10))`;
// create the filled polygon boundary points
_VNormShapeX = V Concat(
J( 61, 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 vectors 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
)
);
); les deux premiers arguments de la fonction spécifient "l'origine" ou l'emplacement de la distribution à dessiner (c'est-à-dire la position (x,y) pour la base centrale de la distribution).Les deux seconds arguments facultatifs sont la mise à l'échelle de la taille des distributions.La taille par défaut est basée sur une distribution normale standard et la mise à l'échelle est relative à la direction x et à la direction y.
Le résultat de la fonction est une expression évaluée qu'un script graphique a utilisée pour dessiner la distribution sous forme de polygone.
exemples:
func_VNormalShape(1,3) crée l'instruction de polygone pour une distribution normale standard orientée verticalement centrée sur x=1, y=3.
func_VNormalShape(2,4, 0.5, 1.5) crée la distribution centrée sur x=2, y=5, mais la largeur horizontale est réduite d'un facteur de 0,5 et la largeur verticale est augmentée d'un facteur de 1,5.
Discussion
Voici le script complet qui crée une partie du graphique global.J'ai enregistré la sortie de ce script sous forme de fichier image, puis importé dans PowerPoint pour ajouter quelques annotations et suis arrivé au graphique affiché en haut du message
names default to here(1);
func_VNormalShape = Function( // create a polygon that looks like a vertically oriented normal distribution
{_xloc, _yloc, _xscale = 1, _yscale = 1},
{_VNormShapeX, _VNormShapeY},
// create a vector of y values to use for plotting the shape
_VNormShapeY = ((_yloc - 3 * _yscale) :: (_yloc + 3 * _yscale) :: (_yscale / 10))`;
// create the filled polygon boundary points
_VNormShapeX = V Concat(
J( 61, 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 vectors 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
)
);
);
_nw=new window("Figure",
_ob=Outline Box("Figure",
_gb=Graph Box(
suppressaxes,
x scale(0,5),
y scale(-1,11),
Xname(""),
Yname(""),
fill color("gray");
func_VNormalShape(1, 8, .75, .75);
line({1,8}, {1.75, 8});
func_VNormalShape(2, 6, .75, .75);
line({2,6}, {2.75, 6});
func_VNormalShape(3, 4, .75, .75);
line({3,4}, {3.75, 4});
func_VNormalShape(4, 2, .75, .75);
line({4,2}, {4.75, 2});
linestyle(1);
Pen Size(2);
line({0.5, 5}, {4.5, 5});
)
)
);
_gb[FrameBox(1)]<<{top(0), bottom(0), left(0), right(0)};sortie résultante :

Voir également
J'avais envie de le partager à nouveau tout seul, car il m'a été bien pratique aujourd'hui quand je l'ai sorti pour faire ma silhouette.