agregar gráfico a un cuadro de gráfico usando un bucle forHola,
Estoy tratando de agregar gráficos (rectángulos) a un cuadro de gráficos usando un bucle for. El resultado esperado es una cruz hecha de 31 rectángulos. Tengo un script de trabajo en el que escribí el código línea por línea, pero me gustaría hacerlo más corto y escalable.
El siguiente script se está ejecutando, pero solo se mostrará el último rectángulo en el cuadro del gráfico.
Cuando escribo el guión con 2 líneas de " Agregar secuencia de comandos de gráficos " (comentado en la parte inferior de la secuencia de comandos) en lugar del bucle for, agrega 2 rectángulos. Hubiera esperado que un bucle for hiciera lo mismo. ¿Cómo puedo conseguir que lo haga?
Names default to here(1);
//dt that holds the parameters for the rectangles
dt_loc = open (momo_dir || "rectangle_locations.csv" );
//create a graphic box
base_box = graph Box(
Frame Size( 400, 400 ),
XName(""), XScale(19,81), yScale(19,91), SuppressAxes, Pen Color( 1 );
);
//define the frame box in which the rectangles will e displayed
framebox = base_box[frame box( 1 )];
//ran a for loop for all 31 rectangles to be added to the Base_box
For( f = 1, f <= N Rows(dt_loc), f++,
//f=1;
//location/sizes of each box is defined here based on a csv file
rec_left = dt_loc:left[f];
rec_top = dt_loc:top[f];
rec_right = dt_loc:right[f];
rec_bottom = dt_loc:bottom[f];
//add the graphic script to the base_box for each row (aka rectangle) in the table
framebox << Add Graphics Script(Rect(rec_left, rec_top, rec_right, rec_bottom, fill = 0););
); //end f for loop
try(close(dt_loc, no save));
//Running the following 2 lines will add 2 rectangles
//framebox << Add Graphics Script(Rect(40,75,50,70, fill = 0););
//framebox << Add Graphics Script(Rect(40,70,50,65, fill = 0););
cross_rep = New window ("Cross", vlistbox(base_box));Gráficossecuencias de comandosRe: agregar gráfico a un cuadro de gráfico usando un bucle forUna pregunta/comentario de seguimiento.
La variable dt_loc no se pasa al cuadro del gráfico. Encontré dos opciones para que funcione:
- abra la tabla dt_loc dentro del cuadro del gráfico (que funciona si solo uso la tabla en esa parte del script)
- hacer dt_loc una variable global (::dt_loc)
¿Hay alguna otra forma de hacer que la variable dt_loc esté disponible dentro del cuadro del gráfico?
Gracias
Viejo
Re: agregar gráfico a un cuadro de gráfico usando un bucle forEstoy de acuerdo. El segundo guión es realmente conciso y va al grano. También probé el bucle for en el cuadro del gráfico, pero debe haber tenido un error en el script que impidió que funcionara.
Muchas gracias.
Viejo
Re: agregar gráfico a un cuadro de gráfico usando un bucle forPerfecto. Eso funciono. Muchísimas gracias.
Viejo
Re: agregar gráfico a un cuadro de gráfico usando un bucle forel script de gráficos se ejecuta más tarde, cada vez que el gráfico necesita actualizarse (zoom, etc.). Ha especificado variables en un caso y números codificados en el otro. Puede convertir las variables en números de varias maneras. La forma en que suelo hacer esto se parece a esto:
eval(evalexpr(
framebox << Add Graphics Script(Rect(expr(rec_left), expr(rec_top), expr(rec_right), expr(rec_bottom), fill = 0););
));
que envuelve las variables con expr(...), usa evalexpr(...) para reemplazar expr(...) con el valor real, y usa eval(...) para evaluar la expresión devuelta por evalexpr(... ). Es probable que otras personas muestren sus formas preferidas. me gusta @txnelson 2da respuesta
Re: agregar gráfico a un cuadro de gráfico usando un bucle forHa hecho que el guión sea mucho más complejo de lo que debe ser.A continuación se muestran 2 reelaboraciones de su guión.El primero es tomar su flujo y simplemente convertirlo en un modelo de trabajo.El segundo es hacerlo muy conciso (pequeño) como también lo solicitó.
Names Default To Here( 1 );
//dt that holds the parameters for the rectangles
dt_loc = Open( momo_dir || "rectangle_locations.csv" );
//create a graphic box
base_box = Graph Box(
Frame Size( 400, 400 ),
XName( "" ),
X Scale( 19, 81 ),
Y Scale( 19, 91 ),
SuppressAxes,
Pen Color( 1 );
//ran a for loop for all 31 rectangles to be added to the Base_box
For( f = 1, f <= N Rows( dt_loc ), f++,
// location/sizes of each box is defined here based on a csv file
rec_left = dt_loc:left[f];
rec_top = dt_loc:top[f];
rec_right = dt_loc:right[f];
rec_bottom = dt_loc:bottom[f];
// Draw the rectangle
Rect( rec_left, rec_top, rec_right, rec_bottom, fill = 0 );
);
);
Try( Close( dt_loc, no save ) );
cross_rep = New Window( "Cross", V List Box( base_box ) );
Names Default To Here( 1 );
//dt that holds the parameters for the rectangles
dt_loc = Open( momo_dir || "rectangle_locations.csv" );
cross_rep = New Window( "Cross",
//create a graphic box
base_box = Graph Box(
Frame Size( 400, 400 ),
XName( "" ),
X Scale( 19, 81 ),
Y Scale( 19, 91 ),
SuppressAxes,
Pen Color( 1 );
//ran a for loop for all 31 rectangles to be added to the Base_box
For( f = 1, f <= N Rows( dt_loc ), f++,
// location/sizes of each box is defined here based on a csv file
Rect( dt_loc:left[f], dt_loc:top[f], dt_loc:right[f], dt_loc:bottom[f] );
);
)
);
Try( Close( dt_loc, no save ) );