Bonjour,
J'essaie de colorer les courbes d'une manière spécifique et je ne trouve pas de moyen...
Fondamentalement, j'ai quelques courbes qui sont regroupées par une étiquette. Comment afficher toutes les courbes avec une couleur différente pour chaque groupe ?
Jusqu'ici, j'ai essayé dans Graph Builder de mettre le "label" mis dans la partie "overlay"...Mais comme ça JMP considère toutes les courbes d'un groupe comme étant UNE courbe.
J'ai essayé une chose plus avancée en utilisant JSL (trouvez le code ci-dessous). J'ai pu générer les courbes et accéder aux différentes lignes et les colorer indépendamment, mais je perds le lien entre les lignes et l'étiquette.
Dans l'exemple ci-dessous : comment puis-je obtenir toutes les courbes de Honda en rouge, celles de Ford en Bleu, et celles de GM en violet ? (ceci en supposant bien sûr que je ne sache pas a priori combien de courbes il y a dans chaque groupe, et non combien il y a de groupes).
Des idées ?
// 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" );
);Quatre points :
Script
@XanGregg a probablement raison de dire que ce que vous voulez vraiment, c'est un groupe de tracés créés ou modifiés à l'aide de JSL au lieu d'un seul grand graphique. Voici deux choses à essayer cependant.
Tracer des lignes
J'ai du mal à imaginer le graphique que vous souhaitez créer, cela ressemble à beaucoup de lignes sur un graphique et à une légende d'une page. À l'aide des données pivotées, le graphique supérieur du script ci-dessous crée des lignes pour chaque voiture colorée par le fabricant.Avec seulement 5 styles de lignes avec lesquels travailler, vous ne pouvez pas identifier le type de voiture dans la légende en utilisant autre chose que la couleur.Peut-être pourriez-vous utiliser ce tableau pour identifier le fabricant de la voiture, puis un deuxième tableau regroupé ou emballé par fabrication, puis coloré par voiture ? C'est le graphique du bas dans ce script, notez que vous pouvez cliquer sur une ligne et la voir identifiée dans le graphique du bas.
//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 ) )} )
)
)
)
Légende
Pour que la légende affiche le constructeur et la voiture ensemble, créez une colonne qui concatène le nom du constructeur avec le nom de la voiture.Par exemple:
New Column( "Man:Car",
Character,
"Nominal",
Formula( :Manufacturer || " " || :Label ),
Set Selected,
Set Display Width( 108 )
)
Tracer des points à la place
Autre idée : au lieu d'essayer d'afficher autant de lignes, pourriez-vous plutôt résumer chaque courbe en ce que vous essayez réellement de visualiser ?Pour l'exemple de ligne simplifié [je suppose], vous pouvez tracer des points individuels pour chaque voiture montrant la pente et l'interception.Deux mille points sur un graphique sont plus faciles à interpréter que 2000 lignes. À un moment donné, j'abandonne quand même la légende).Ici, j'ai commencé avec le long tableau et j'ai fait un modèle d'ajustement "par" la colonne Man-Car créée ci-dessus, puis j'ai enregistré le tableau des estimations en tant que tableau combiné, divisé le tableau par terme, puis représenté graphiquement :
