Hallo,
Ich versuche, Kurven auf eine bestimmte Weise einzufärben, und ich finde keinen Weg ...
Grundsätzlich habe ich ein paar Kurven, die nach einem Label gruppiert sind. Wie kann ich alle Kurven mit einer anderen Farbe für jede Gruppe anzeigen?
Bisher habe ich versucht, im Graph Builder das "Label" in den "Overlay"-Teil einzufügen ... Aber so betrachtet JMP alle Kurven einer Gruppe als EINE Kurve.
Ich habe eine fortgeschrittenere Sache mit JSL ausprobiert (finden Sie den Code unten). Ich konnte die Kurven generieren und auf die verschiedenen Linien zugreifen und sie unabhängig voneinander färben, aber ich verliere die Verbindung zwischen den Linien und dem Etikett.
Im folgenden Beispiel: Wie bekomme ich alle Kurven von Honda in Rot, die von Ford in Blau und die von GM in Lila? (Dies setzt natürlich voraus, dass ich a priori nicht weiß, wie viele Kurven in jeder Gruppe sind, und nicht, wie viele Gruppen es gibt).
Irgendwelche Ideen ?
// 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" );
);Vier Punkte:
Skripterstellung
@XanGregg ist wahrscheinlich richtig, dass Sie wirklich eine Gruppe von Diagrammen wollen, die mit JSL anstelle eines großen Diagramms erstellt oder geändert wurden. Im Folgenden finden Sie jedoch zwei Dinge, die Sie ausprobieren sollten.
Plotten von Linien
Es fällt mir schwer, mir das Diagramm vorzustellen, das Sie erstellen möchten. Es klingt nach vielen Linien in einem Diagramm und einer seitenlangen Legende. Unter Verwendung der Pivot-Daten erstellt das obere Diagramm im Skript unten Linien für jedes Auto, das nach Hersteller gefärbt ist.Mit nur 5 Linienstilen, mit denen Sie arbeiten können, können Sie den Autotyp in der Legende nur anhand der Farbe identifizieren.Vielleicht könnten Sie dieses Diagramm verwenden, um den Hersteller des Autos zu identifizieren, und dann ein zweites Diagramm, das nach Hersteller gruppiert oder umbrochen und dann nach Auto gefärbt ist? Das ist das untere Diagramm in diesem Skript. Beachten Sie, dass Sie auf eine Linie klicken und sie im unteren Diagramm identifiziert sehen können.
//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 ) )} )
)
)
)
Legende
Damit die Legende den Hersteller und das Auto zusammen anzeigt, erstellen Sie eine Spalte, die den Herstellernamen mit dem Autonamen verkettet.Zum Beispiel:
New Column( "Man:Car",
Character,
"Nominal",
Formula( :Manufacturer || " " || :Label ),
Set Selected,
Set Display Width( 108 )
)
Plot Points Stattdessen
Eine andere Idee: Anstatt zu versuchen, so viele Linien anzuzeigen, könnten Sie stattdessen jede Kurve zu dem zusammenfassen, was Sie tatsächlich zu visualisieren versuchen?Für das [ich nehme an] vereinfachte Linienbeispiel könnten Sie einzelne Punkte für jedes Auto zeichnen, die die Steigung und den Schnittpunkt zeigen.Zweitausend Punkte auf einem Diagramm sind einfacher zu interpretieren als 2000 Linien. Irgendwann gebe ich die Legende aber trotzdem auf).Hier habe ich mit der langen Tabelle begonnen und ein Anpassungsmodell „nach“ der oben erstellten Man-Car-Spalte erstellt, dann die Schätzungstabelle als kombinierte Tabelle gespeichert, die Tabelle nach Begriffen aufgeteilt und dann grafisch dargestellt:
