Ciao,
Sto cercando di colorare le curve in un modo specifico e non trovo un modo...
Fondamentalmente, ho un paio di curve raggruppate da un'etichetta. Come posso visualizzare tutte le curve con un colore diverso per ogni gruppo?
Finora, ho provato in Graph Builder a inserire l'"etichetta" nella parte "sovrapposizione" ... Ma in questo modo JMP considera tutte le curve di un gruppo come UNA curva.
Ho provato una cosa più avanzata usando JSL (trova il codice sotto). Sono stato in grado di generare le curve e accedere alle diverse linee e colorarle in modo indipendente, ma perdo il legame tra le linee e l'etichetta.
Nell'esempio seguente: come posso ottenere tutte le curve di Honda in rosso, quelle di Ford in blu e quelle di GM in viola? (questo presupponendo ovviamente che io non sappia a priori quante curve ci sono in ogni gruppo, e non quanti gruppi ci sono).
Qualche idea ?
// 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" );
);Quattro punti:
Scripting
@XanGregg probabilmente è giusto che quello che vuoi veramente sia un gruppo di grafici creati o modificati usando JSL invece di un grande grafico. Di seguito sono riportate due cose da provare.
Linee di tracciamento
Ho difficoltà a immaginare il grafico che vuoi creare, suona come molte linee su un grafico e una legenda lunga una pagina. Utilizzando i dati pivot, il grafico in alto nello script seguente crea linee per ogni auto colorate per produttore.Con solo 5 stili di linee con cui lavorare, non è possibile identificare il tipo di auto nella legenda utilizzando nient'altro che il colore.Forse potresti usare questo grafico per identificare il produttore dell'auto e poi un secondo grafico raggruppato o avvolto per produttore e poi colorato per auto? Questo è il grafico in basso in questo script, nota che puoi fare clic su una linea e vederla identificata nel grafico in basso.
//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 ) )} )
)
)
)
Leggenda
Per fare in modo che la legenda mostri il produttore e l'auto insieme, crea una colonna che concatena il nome del produttore con il nome dell'auto.Per esempio:
New Column( "Man:Car",
Character,
"Nominal",
Formula( :Manufacturer || " " || :Label ),
Set Selected,
Set Display Width( 108 )
)
Punti della trama invece
Un'altra idea: invece di provare a visualizzare così tante linee, potresti invece riassumere ogni curva in ciò che stai effettivamente cercando di visualizzare?Per l'esempio di linea semplificata [presumo], potresti tracciare singoli punti per ogni macchina che mostrano la pendenza e l'intercettazione.Duemila punti su un grafico sono più facili da interpretare di 2000 linee. Ad un certo punto però rinuncio ancora alla leggenda).Qui ho iniziato con la tabella lunga e ho creato un modello di adattamento "dalla" colonna Man-Car creata sopra, quindi ho salvato la tabella delle stime come tabella combinata, ho diviso la tabella per termine, quindi ho rappresentato graficamente:
