Bonjour,
J'essaie de créer des régions d'arrière-plan pour un graphique où les régions représentent des zones d'une certaine pente, comme indiqué ci-dessous :

où les régions colorées sont basées sur la valeur X/Y (ffc dans le graphique), allant de <1 à >10. Étant donné que les plages de X et Y varient en fonction des observations, j'ai les régions ou les contours cartographiés à l'aide de la fonction de polygone et en tirant les axes résultants min et max comme entrées comme suit :
Polygone( {0, 0}, {XMin, YMax}, {XMax, YMax}, {XMax, XMax * 10} )
qui fonctionne assez bien. Mon problème est de spécifier les emplacements de texte qui étiquettent chaque région, je n'ai pas encore trouvé de moyen pour que le texte se déplace dynamiquement en fonction des données similaires aux polygones de sorte que je n'ai pas à entrer après coup et à spécifier les coordonnées exactes . Si quelqu'un pouvait fournir des idées/recommandations sur la réalisation d'une sorte de texte dynamique dans le graphique, ce serait très apprécié. Je suis sûr qu'il existe un meilleur moyen de le faire plutôt que d'utiliser les fonctions de polygone et de texte, mais je n'arrive pas à le comprendre, ou s'il existe un bon moyen de le faire. Je réalise aussi que c'est purement esthétique, mais j'ai passé trop de temps à essayer de trouver une solution, donc je suis déterminé à trouver quelque chose qui fonctionne.
Merci à tous ceux qui fourniront une réponse.
Je suppose que vous avez trouvé la fonction Text() pour dessiner les étiquettes de région, mais que vous rencontrez des problèmes mathématiques pour les placer. Vous trouverez ci-dessous un code qui fonctionne raisonnablement bien. Il peut être nécessaire de l'ajuster si la première ou la dernière étiquette est coupée par les bords xmin/ymin car ce code ne les teste pas. J'ai calculé l'emplacement du texte comme étant sur l'angle médian de la région, mais vous voudrez peut-être les coder en dur à la place. Autrement dit, ayez une liste d'angles de texte qui accompagne la liste des angles d'arrêt pour chaque zone.

xmin = 400;
xmax = 1800;
ymin = 0;
ymax = 3600;
New Window( "fills",
gb = Graph Box(
Frame Size( 500, 500 ),
X Scale( xmin, xmax ),
Y Scale( ymin, ymax ),
Marker(
Marker State( 8 ),
J( 20, 1, Random Normal( 1000, 50 ) ),
J( 20, 1, Random Normal( 1000, 300 ) )
)
)
);
framebox = gb[frame box( 1 )];
framebox << Add Graphics Script(
max diagonal = Max( xmax, ymax ) * Sqrt( 2 );
Fill Color( "red" );
stops = {0, 1, 2, 4, 10};
For( i = 2, i <= N Items( stops ), i++,
// fill wedge
Transparency( 0.07 * i );
a1 = ATan( stops[i] );
a0 = ATan( stops[i - 1] );
Polygon( {0, 0},
{Cos( a1 ) * max diagonal, Sin( a1 ) * max diagonal},
{Cos( a0 ) * max diagonal, Sin( a0 ) * max diagonal} );
// text label in center of wedge, constrained to graph bounds
text angle = Mean( a0, a1 );
xt = Cos( text angle ) * max diagonal;
yt = Sin( text angle ) * max diagonal;
scale to fit = Min( xmax / xt, ymax / yt ) * 0.9;
Transparency( 0.9 );
Text(
Center justified,
{xt * scale to fit, yt * scale to fit},
Char( stops[i - 1] ) || " < r < " || Char( stops[i] )
);
);
);