Bonjour. J'écris un script pour un graphique à barres dans le générateur de graphiques, car l'utilisation d'un graphique standard n'élimine pas les barres vides, contrairement au générateur de graphiques. J'autorise l'utilisation de types de modélisation continue comme facteur X. Laissez-moi vous expliquer comment j'aborde cela.
L'utilisateur sélectionne certaines colonnes pour tracer un graphique à barres. Je crée le graphique à l'aide du générateur de graphiques et de la première colonne sélectionnée. Ensuite, s'il y a plusieurs colonnes sélectionnées, j'entre et << ajoute des variables au générateur de graphiques. Cela fonctionne exactement comme je le souhaite, sauf lorsque l'une des colonnes sélectionnées est continue. Ensuite, le générateur de graphiques remplace l'intégralité du X par la variable continue et indique qu'il y a plus de variables, mais il ne s'agit que d'un tracé par rapport à une. Lorsque je crée le graphique manuellement comme ceci en changeant la variable continue en ordinale, cela fonctionne comme je le souhaite. Je change donc chaque colonne continue en oridinal mais le graphique n'ajoute toujours pas la variable mais la remplace.
Quelqu'un a-t-il une idée sur la façon dont je peux faire en sorte que cela fonctionne comme je le souhaite ? Voici une version simplifiée de mon script :
myWin = Column Dialog( FactorCol = Col List( "Multivariate Factor(s)" ) );
myFactor = myWin["FactorCol"];
myPlot = Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( Eval( myFactor[1] ) ), Y( yCol ), Color( Eval( myColor ) ) ),
Elements( Bar( X, Y, Summary Statistic( "Std Dev" ), Label( "Label by Value" ) ) ),
SendToReport(
Dispatch(
{},
ScaleBox,
{Label Row( 1, {Automatic Tick Marks( 0 ), Show Major Ticks( 1 ), Lower Frame( 1 ), Tick Mark Style( "Long Divider" )} )}
)
)
);
//If there is more than one factor then need to add variables to the graph
If( N Items( myFactor ) > 1,
myRep = Report( myPlot )[Graph Builder Box( 1 )];
For( j = 2, j <= N Items( myFactor ), j++,
xcol = Column( dtmm, myFactor[j] );
If( xcol << Get Modeling Type == "Continuous",
//set a column property so I can change it back later
xcol << Set Property( "change", 1 );
xcol << Modeling Type( "Ordinal" );
);
myRep << Add Variable( {xcol, Role( "X" ), Position( 1 )} );
);
//now I have to adjust all the x-axis for the way I want it
For( j = 1, j <= N Items( myFactor ), j++,
Report( myPlot )[Axisbox( 1 )] << {Label Row(
j,
{Automatic Tick Marks( 0 ), Show Major Ticks( 1 ), Lower Frame( 1 ), Tick Mark Style( "Long Divider" )}
)}
);
);
En fait, j'ai compris comment procéder en vérifiant étape par étape les variables de la boîte de création de graphiques. Si la colonne est continue, je la change en ordinale et lors de l'ajout d'une variable, vous devez ajouter un terme de position interne. Voici le morceau de script pertinent.
//graph builder can not add factors unless they are ordinal or nominal
//so if it is continuous, change to ordinal, and set a column property to change back later
If( xcol << Get Modeling Type == "Continuous",
xcol << Set Property( "change", {1} );
xcol << Modeling Type( "Ordinal" );
myRep << Add Variable( {xcol, Role( "X" ), Position( 1 ), Inner Position[i]} ),
,
myRep << Add Variable( {xcol, Role( "X" ), Position( 1 )} )
);Cela fait exactement ce que je veux qu’il fasse.
H
Merci. Oui, je sais que créer un script de chaîne est une option mais je suis toujours réticent à le faire. Mais cela peut être nécessaire dans ce cas.Je suis déçu que ce soit le cas.
meilleur
H