Hola,
Estoy tratando de colorear las curvas de una manera específica y no encuentro la manera...
Básicamente, tengo un par de curvas que están agrupadas por una etiqueta. ¿Cómo puedo mostrar todas las curvas con un color diferente para cada grupo?
Hasta ahora, probé en Graph Builder poniendo la "etiqueta" en la parte "superpuesta"... Pero así JMP considera todas las curvas de un grupo como UNA sola curva.
Intenté algo más avanzado usando JSL (busque el código a continuación). Pude generar las curvas y acceder a las diferentes líneas y colorearlas de forma independiente, pero pierdo el vínculo entre las líneas y la etiqueta.
En el siguiente ejemplo: ¿cómo puedo obtener todas las curvas de Honda en rojo, las de Ford en azul y las de GM en púrpura? (esto suponiendo, por supuesto, que no sé a priori cuántas curvas hay en cada grupo, y tampoco cuántos grupos hay).
Algunas ideas ?
// Generate a simple table as example
dt = New Table( "Untitled 9050",
Add Rows( 33 ),
New Column( "Time [years]",
Numeric,
Continuous,
Format( "Best", 2 ),
Set Values(
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
)
),
New Column( "car1",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values(
[0, 0.8, 1.6, 2.4, 3.2, 4, 4.8, 5.6, 6.4, 7.2, 8, 0, 1.2, 2.4, 3.6, 4.8,
6, 7.2, 8.4, 9.6, 10.8, 12, 0, 2.2, 4.4, 6.6, 8.8, 11, 13.2, 15.4, 17.6,
19.8, 22]
)
),
New Column( "car2",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Selected,
Set Values(
[0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 0, 1.4, 2.8, 4.2, 5.6, 7,
8.4, 9.8, 11.2, 12.6, 14, 0, 2.4, 4.8, 7.2, 9.6, 12, 14.4, 16.8, 19.2,
21.6, 24]
)
),
New Column( "car3",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values(
[0, 0.6, 1.2, 1.8, 2.4, 3, 3.6, 4.2, 4.8, 5.4, 6, 0, 1.6, 3.2, 4.8, 6.4,
8, 9.6, 11.2, 12.8, 14.4, 16, 0, 2.6, 5.2, 7.8, 10.4, 13, 15.6, 18.2,
20.8, 23.4, 26]
)
),
New Column( "car4",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values(
[0, 0.4, 0.8, 1.2, 1.6, 2, 2.4, 2.8, 3.2, 3.6, 4, 0, 1.8, 3.6, 5.4, 7.2,
9, 10.8, 12.6, 14.4, 16.2, 18, 0, 2.8, 5.6, 8.4, 11.2, 14, 16.8, 19.6,
22.4, 25.2, 28]
)
),
New Column( "Manufacturer",
Character( 16 ),
Nominal,
Set Values(
{"Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda",
"Honda", "Honda", "Honda", "Ford", "Ford", "Ford", "Ford", "Ford",
"Ford", "Ford", "Ford", "Ford", "Ford", "Ford", "GM", "GM", "GM", "GM",
"GM", "GM", "GM", "GM", "GM", "GM", "GM"}
)
)
);
// stack the table
dt_Stack = dt << Stack(
columns( :car1, :car2, :car3, :car4 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
// Create a graph
MyGraph = Graph Builder(
Variables( X( :Name( "Time [years]" ) ), Y( :Data ), Overlay( :Label ) ),
Elements(
Points( X, Y, Legend( 1 ), Jitter( 1 ) ),
Smoother( X, Y, Legend( 2 ) )
)
);
// Access the lines and their properties
GraphsRep = Report( MyGraph );
nbp = GraphsRep[FrameBox( 1 )] << segCount( "LineSeg" );
// Modify the lines colors
For( n = 1, n <= nbp, n++,
s = GraphsRep[FrameBox( 1 )] << FindSeg( LineSeg( n ) );
s << Line Color( "Black" );
);Cuatro puntos:
secuencias de comandos
@xangregg probablemente tenga razón en que lo que realmente quiere es un grupo de gráficos creados o modificados usando JSL en lugar de un gran gráfico. Sin embargo, a continuación hay dos cosas para probar.
Líneas de Trazado
Tengo dificultades para imaginar el gráfico que desea crear, suena como muchas líneas en un gráfico y una leyenda de una página. Usando los datos pivotados, el gráfico superior en el script a continuación crea líneas para cada automóvil coloreado por fabricante.Con solo 5 estilos de líneas para trabajar, no se puede identificar el tipo de automóvil en la leyenda usando nada más que color.¿Tal vez podría usar este cuadro para identificar el fabricante del automóvil y luego un segundo cuadro que se agrupe o envuelva por fabricante y luego coloree por automóvil? Ese es el gráfico inferior en este script, tenga en cuenta que puede hacer clic en una línea y verla identificada en el gráfico inferior.
//Start with the long table in your first post.<BR />New Window("Two Graphs",
Graph Builder(
Size( 600, 400 ),
Show Control Panel( 0 ),
Variables(
X( :Name( "Time [years]" ) ),
Y( :Data ),
Overlay( :Name( "Man-Car" ) ),
Color( :Manufacturer )
),
Elements( Line( X, Y, Legend( 20 ) ) ),
SendToReport(
Dispatch(
{},
"Time [years]",
ScaleBox,
{Label Row( Show Major Grid( 1 ) )}
),
Dispatch( {}, "Data", ScaleBox, {Label Row( Show Major Grid( 1 ) )} )
)
),
Graph Builder(
Size( 604, 448 ),
Show Control Panel( 0 ),
Variables(
X( :Name( "Time [years]" ) ),
Y( :Data ),
Wrap( :Manufacturer ),
Overlay( :Label )
),
Elements( Line( X, Y, Legend( 20 ) ) ),
SendToReport(
Dispatch(
{},
"Time [years]",
ScaleBox,
{Label Row( Show Major Grid( 1 ) )}
),
Dispatch( {}, "Data", ScaleBox, {Label Row( Show Major Grid( 1 ) )} )
)
)
)
Leyenda
Para que la leyenda muestre el fabricante y el automóvil juntos, cree una columna que concatene el nombre del fabricante con el nombre del automóvil.Por ejemplo:
New Column( "Man:Car",
Character,
"Nominal",
Formula( :Manufacturer || " " || :Label ),
Set Selected,
Set Display Width( 108 )
)
Trazar puntos en su lugar
Otra idea: en lugar de tratar de mostrar tantas líneas, ¿podría resumir cada curva en lo que realmente esté tratando de visualizar?Para el ejemplo de línea simplificada [supongo], podría trazar puntos individuales para cada automóvil que muestren la pendiente y la intersección.Dos mil puntos en un gráfico son más fáciles de interpretar que 2000 líneas. Sin embargo, en algún momento todavía renuncio a la leyenda).Aquí comencé con la tabla larga e hice un modelo de ajuste 'por' la columna Man-Car creada anteriormente, luego guardé la tabla de estimaciones como una tabla combinada, dividí la tabla por término y luego grafiqué:
