Hola. Estoy escribiendo un gráfico de barras en el generador de gráficos porque usar un gráfico estándar no elimina las barras vacías como lo hace el generador de gráficos. Estoy permitiendo el uso de tipos de modelado continuo como un factor X. Déjame explicarte cómo me estoy acercando a esto.
El usuario selecciona algunas columnas para trazar un gráfico de barras. Creo el gráfico utilizando el generador de gráficos y la primera columna seleccionada. Luego, si hay más de una columna seleccionada, entro y << agrego variables al generador de gráficos. Esto funciona exactamente como lo deseo, excepto cuando una de las columnas seleccionadas es continua. Luego, el generador de gráficos reemplaza la X completa con la variable continua y dice que hay más variables allí, pero solo se traza contra una. Cuando creo el gráfico manualmente de esta manera cambiando la variable continua a ordinal, funciona de la manera que lo quiero. Así que cambio cada columna continua a oridinal pero la gráfica aún no agrega la variable sino que la reemplaza.
¿Alguien tiene alguna idea de cómo puedo hacer que esto funcione de la manera que lo quiero? Aquí hay una versión simplificada de mi 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 realidad, me di cuenta de cómo hacer esto comprobando las variables del cuadro del generador de gráficos paso a paso. Si la columna es continua, la cambio a ordinal y al agregar una variable, debe agregar un término de posición interno. Aquí está el bit de guión pertinente.
//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 )} )
);Esto hace exactamente lo que quiero que haga.
H
Gracias. Sí, sé que crear un script de cadena es una opción, pero siempre me resisto a hacerlo. Pero puede ser necesario en este caso. Estoy decepcionado de que sea el caso.
mejor
H