¿Qué inspiró esta solicitud de lista de deseos?
Dependiendo de lo que esté haciendo en JMP, a veces tendrá que pasar innecesariamente de datos anchos a datos altos debido a cómo funciona el conmutador de columnas/filtro de datos local; actualmente no podemos "filtrar" columnas. Esta es una de las razones por las que creé el complemento Enhanced Sankey Plot (ESP), ya que es bastante difícil agregar o eliminar rápidamente columnas específicas del generador de gráficos.
¿Cuál es la mejora que le gustaría ver?
¿Me gustaría tener una nueva herramienta? "Filtro de columnas" que me permitiría determinar qué columnas quiero mostrar. Esto funcionaría básicamente como un filtro de datos pero para columnas.
Si tengo una situación como esta en la que tengo varias columnas en mi eje Y, por ejemplo

No tengo opciones fáciles para ocultar o agregar columnas adicionales. Si quiero agregar algunas de esas columnas o agregar otras nuevas, primero tengo que apilar los datos y crear un gráfico con filtro de datos local.

Esto funciona muy bien, pero a veces parece un paso muy innecesario.
¿Por qué es importante esta idea?
Esto reduciría la brecha entre datos altos/apilados y anchos/divididos.
Script para demostrar cómo podría funcionar esto (esto está muy lejos de ser un producto utilizable, pero debería funcionar como demostración, también lo convertiré en un complemento/barra de herramientas cuando tenga tiempo suficiente para diseñar correctamente la interfaz de usuario)
Una columna en Y

Agregar más y actualizar

Eliminar rol X

Añadir dos al rol X

Ver más...
Names Default To Here(1);
delete_variable_for_role = function({report, role}, {Default Local},
all_variables = report << get variables;
For Each({variable}, all_variables,
colname = Arg(variable, 1) << get name;
Try(
Eval(EvalExpr(
report << Remove Variable({Expr(NameExpr(AsColumn(colname))), Role(Expr(role)), Position(1)})
));
);
);
);
add_variables_for_role = function({report, columns, role}, {Default Local},
For Each({colname}, columns,
Eval(EvalExpr(
report << Add Variable({Expr(NameExpr(AsColumn(colname))), Role(Expr(role)), Position(1)});
));
);
);
update_cols = Expr(
cur_cols = fcs << get selected;
cur_role = cb << get selected;
report << inval;
delete_variable_for_role(report, cur_role);
add_variables_for_role(report, cur_cols, cur_role);
report << update window;
wait(0);
);
prepend_column_filter = Expr(
lb = (Report(report) << top parent) << child;
lb << Set Horizontal(1);
ob_colfilter = Outline Box("Column Filter",
V List Box(
H List Box(
Panel Box("Role to Filter",
Lineup Box(N Col(1),
Text Box("Select Role to filter"),
cb = Combo Box({"Y", "X"})
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("Refresh",
update_cols
),
)
)
),
Panel Box("Columns",
fcs = Filter Col Selector(Datatable(dt))
)
)
);
cur_height = report << get height;
fcs << set height(cur_height - 200);
fcs << set width(200);
Eval(EvalExpr(
ob_colfilter << Set Menu Script(
{"Remove Column Filter", Expr(ob_colfilter) << Delete Box; Expr(lb) << Set Horizontal(0)}
);
));
lb << Prepend(ob_colfilter);
);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
dt << Ungroup Columns;
report = dt << Graph Builder(
Size(528, 653),
Show Control Panel(0),
Fit to Window("On"),
Variables(X(:SITE), Y(:NPN1), Y(:PNP1, Position(1))),
Elements(Boxplot(X, Y(1), Y(2), Legend(4)))
);
wait(2);
prepend_column_filter;
¡maravillosa idea!
muuuy útil, gracias @jthi