Hola,
Tengo una pregunta sobre una función para crear múltiples gráficos. Estoy creando una función que llama al constructor de gráficos con ciertas configuraciones para crear múltiples gráficos. Los gráficos son similares, pero tienen diferente número de columnas y un formato ligeramente distinto. La única entrada a la función es la tabla de datos con los datos.
La función crea los gráficos. Guardo cada uno como variable y, finalmente, los agrego a una lista. Más adelante, me gustaría llamar a cada una de las variables (gráficos) de la lista y colocarlas en ventanas diferentes. Sin embargo, esto no funciona y obtengo un espacio en blanco al llamar a la lista con un índice.
Intenté convertir los gráficos en informes, pero eso los hace no interactivos.
Si llamo a la función en el lugar donde quiero colocar el gráfico, colocará los tres gráficos a la vez en lugar de uno a la vez.
Cualquier ayuda sobre cómo navegar por esto sería apreciada.
Deberías poder llamar a la función donde deseas tener los gráficos.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
create_plot = function({dt, colname}, {Default Local},
gb = dt << Graph Builder(
Variables(X(:age), Y(Eval(colname)), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
return(gb);
);
plots = {};
nw = new window("",
V List Box(
Insert Into(plots, create_plot(dt, "height")),
Insert Into(plots, create_plot(dt, "weight"))
)
);
Si no necesita la lista para la recopilación de referencia, puede simplemente eliminarla.
nw = new window("",
V List Box(
gb_height = create_plot(dt, "height"),
gb_weight = create_plot(dt, "weight")
)
);
o simplemente
nw = new window("",
V List Box(
create_plot(dt, "height"),
create_plot(dt, "weight")
)
);
Y la idea sería similar para múltiples ventanas.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
create_plot = function({dt, colname}, {Default Local},
gb = dt << Graph Builder(
Variables(X(:age), Y(Eval(colname)), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
return(gb);
);
nw = new window("",
create_plot(dt, "height")
);
nw = new window("",
create_plot(dt, "weight")
);
O a veces puede que no necesites la nueva ventana
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
create_plot = function({dt, colname}, {Default Local},
gb = dt << Graph Builder(
Variables(X(:age), Y(Eval(colname)), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
return(gb);
);
gb1 = create_plot(dt, "height");
gb2 = create_plot(dt, "weight");
Gracias Jarmo.
Al final, hice algo similar. Creé una cláusula Match y simplemente podía elegir cuál de los tres tipos de gráficos crear. Luego, llamé a la función tantas veces como fuera necesario, con la opción de generar los gráficos individuales. Creo que es equivalente a lo que hiciste al final. Quería que los tres gráficos se generaran con la misma función, ya que todos tienen pequeñas diferencias de formato, más allá de simplemente reemplazar el nombre de la columna como en tu ejemplo, y no quería crear tres funciones diferentes para cada tipo, lo cual también funcionaría.
Además de "¿cómo crear los gráficos?", también se debe considerar "¿cómo organizar los gráficos?".
¿Quizás usar una sola ventana y almacenar los gráficos como pestañas ?