Farbe des Overlay-Plots anpassen (Zeilenfarben)Zum Plotten von Overlay-Plots habe ich eine JMP-Datentabelle, in der ich die Zeilen für jedes Gerät programmgesteuert farbcodiert habe. (große Tabelle mit 100.000 Zeilen) Die Farbe wird korrekt angezeigt, wenn ich beim Overlay-Plot X vs. Y zeichne (Punkte sind Zeilenfarben).Es gibt ein paar tausend Punkte für jedes Gerät, und alle Daten von jedem Gerät haben immer dieselbe Zeilenfarbe.
Wenn ich meinen Plot nach dem Gerät gruppiere, weist JMP ein eigenes Farbschema zu, nicht die Farbe meiner Zeilen. (Nicht das, was ich in diesem Fall will)
Für meine Diagramme möchte ich die Punkte nicht anzeigen, sondern die Punkte mit einer Linie verbinden, und ich möchte, dass die Verbindungsfarbe die Farbe meiner Zeilen ist.
JMP macht die Verbinderfarbe zu einer konstanten Farbe, nicht zur Farbe meiner Zeilen. Die einzige Möglichkeit, eine andere Steckerfarbe zu erhalten, ist die Gruppierung nach Gerät. Aber wenn ich nach Geräten gruppiere, stimmen die Farben nicht mehr mit der Farbe meiner Reihen überein!
Meine DataTable hat Spalten für R-, G-, B-Werte, also könnte ich diese verwenden, war mir aber nicht sicher, was ich tun soll?
Übrigens habe ich ähnliche Probleme, wenn ich GraphBuilder für diese Aufgabe verwende …
Irgendwelche Vorschläge würden geschätzt!
Danke,
Chris
Re: Overlay Plot Farbe anpassen (Zeilenfarben)Danke schön! Das hat bei mir funktioniert.
Re: Overlay Plot Farbe anpassen (Zeilenfarben)Ich habe vor ein paar Jahren eine ähnliche Frage gestellt. Hier ist der Faden:
https://community.jmp.com/t5/Discussions/How-to-create-a-legend-in-Graph-Builder-which-preserves-row/mp/7983#M7977
Re: Overlay Plot Farbe anpassen (Zeilenfarben)__fList__ und __mList__ sind Platzhalter in der Funktion Substitute().Sehen
Hilfe==Scripting Index==>Funktionen==>Ersatz
für Definition und Beispiel(e)
Re: Overlay Plot Farbe anpassen (Zeilenfarben)Jim,
Kannst du definieren
__fListe__
Und
__mListe__
Die Variablen werden in Ihrem Codebeispiel verwendet, aber nicht initialisiert / definiert?
Danke,
ChrisRe: Overlay Plot Farbe anpassen (Zeilenfarben)Chris,
Seien Sie beruhigt, dass Sie JSL verwenden, um das zu tun, was Sie zu tun versuchen.JSL verfügt über alle Funktionen und Fähigkeiten, um Ihr generisches Skript zu erstellen.
Re: Overlay Plot Farbe anpassen (Zeilenfarben)Jim, danke für den Code, ich glaube ich verstehe. Ich schätze die Syntaxbeispiele sehr!Jetzt muss ich es für meinen Fall verallgemeinern (ich muss eine Zeichenfolge erstellen, die alle Bins enthält, die erst zur Laufzeit bekannt sind).
Ich gehe davon aus, dass __fList__ nur eine Liste von Werten aus der interessierenden Spalte ist, für die Sie eine bestimmte Farbe wünschen.Ich gehe also davon aus, dass dieser Ausdruck größer werden könnte, und meine Liste kann Tausende von Elementen umfassen, und ich könnte mehrere verschiedene Farbfächer im Ausdruck haben.
Vielleicht habe ich heute noch Zeit, es zu versuchen, ich werde Sie wissen lassen, wie es läuft.
Die schwierigste Herausforderung, die ich sehe, besteht darin, den folgenden Ausdruck für meinen verallgemeinerten Fall zu erstellen, aber ich werde zunächst ein fest codiertes Beispiel als Proof of Concept versuchen. Ich komme möglicherweise auf das Forum zurück, wenn ich mit dem Ausdruck nicht weiterkomme.
Danke noch einmal!
Chris
Eval(
Substitute(
Expr(
dt:sex << set property( "value colors", {"F" = __fList__, "M" = __mList__} )
),
Expr( __fList__ ), fColorList,
Expr( __mList__ ), mColorList
)
);
Eval(
Substitute(
Expr(
dt:sex << set property( "value colors", {"F" = __fList__, "M" = __mList__} )
),
Expr( __fList__ ), fColorList,
Expr( __mList__ ), mColorList
)
);
// Set the row state colors
dt << Color by Column( :Sex );
Re: Overlay Plot Farbe anpassen (Zeilenfarben)Hier ist ein Skript, das Ihnen eine Vorstellung davon vermitteln soll, wie Sie mit den RGB-Farben umgehen, wenn Sie die Zeilenstatusfarben und/oder die Spalteneigenschaft Wertfarben festlegen
Names Default To Here( 1 );
// Open a sample data table, and modify it to
// have 3 new columns representing the RGB values
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "R" );
dt << New Column( "G" );
dt << New Column( "B" );
For Each Row(
If(
:Sex == "F",
:R = Color To RGB( "red" )[1];
:G = Color To RGB( "red" )[2];
:B = Color To RGB( "red" )[3];,
:R = Color To RGB( "purple" )[1];
:G = Color To RGB( "purple" )[2];
:B = Color To RGB( "purple" )[3];,
)
);
// Here are a couple of examples of setting colors
// The first one just sets the row colors based upon
// the RGB colors from the :R, :G, :B columns
For( i = 1, i <= N Rows( dt ), i++,
colorList = {};
colorList[1] = :R[i];
colorList[2] = :G[i];
colorList[3] = :B[i];
Row State( i ) = Color State( colorList );
);
Wait( 10 );
dt << clear row states;
Wait( 5 );
// The next example, sets the row state colors by
// first setting the "Value Colors", column
// property, and then sets the row state colors
// based upon the "Value Colors"
// To set the "Value Colors", the below commented
// statement needs to be created using JSL
/*dt:sex << set property("value colors",
{"F" = {0.670588235294118, 0.0313725490196078, 0.988235294117647},
"M" = {0.941176470588235, 0.196078431372549, 0.274509803921569}});*/
// First we will create the female RGB color list
// Find a row that has the RGB colors we desire
rowList = dt << get rows where( :Sex == "F" );
// Since all values of R,G & B will be the same, only used the first
// selected row to create the list for the females
fColorList = {};
fColorList[1] = :R[rowList[1]];
fColorList[2] = :G[rowList[1]];
fColorList[3] = :B[rowList[1]];
// Repeat for the males
rowList = dt << get rows where( :Sex == "M" );
mColorList = {};
mColorList[1] = :R[rowList[1]];
mColorList[2] = :G[rowList[1]];
mColorList[3] = :B[rowList[1]];
// Substitute into a template of the Set Property structure
// the created RGB lists for females and males
Eval(
Substitute(
Expr(
dt:sex << set property( "value colors", {"F" = __fList__, "M" = __mList__} )
),
Expr( __fList__ ), fColorList,
Expr( __mList__ ), mColorList
)
);
// Set the row state colors
dt << Color by Column( :Sex );
Re: Overlay Plot Farbe anpassen (Zeilenfarben)Es fällt mir schwer, mir anhand Ihrer Beschreibung vorzustellen, was Sie erhalten haben, aber Sie müssen sich möglicherweise ansehen, wie Overlay Plot benutzerdefinierte Farben auf Ihre Gruppen anwendet, indem Sie einige Farben manuell auswählen und das Skript speichern.Dann würde ich denken, Sie könnten Ihr eigenes Skript schreiben, das stattdessen die gewünschten RGB-Werte für jede Gruppe angibt.Möglicherweise müssen Sie das Skript durch eine Schleife oder ähnliches erstellen, aber ich bin sicher, dass dies möglich ist.
Können Sie ein minimales Arbeitsbeispiel für einen Datensatz bereitstellen, um zu veranschaulichen, was Sie beschreiben?
Re: Overlay Plot Farbe anpassen (Zeilenfarben)Dies ist hilfreich, wenn ich eine Spalte "markiere" (Label / Unlabel) und nach dieser Spalte färbe, stimmen die Zeilenfarben jetzt mit der Farbe überein, wenn ich nach dieser Spalte plotte und gruppiere, aber jetzt ist meine Frage, wie ich das programmgesteuert einstelle RGB-Werte für verschiedene Gruppen in dieser Spalte.Ich möchte die Möglichkeit haben, festzulegen, was jede der Farben durch die RGB-Werte ist. Ich bin mir des JSL-Sytex nicht sicher.Ich habe eine Spalte für R, G und B und könnte eine verkettete Spalte erstellen, die alle 3 enthält, und dann nach dieser Spalte färben, war mir aber nicht sicher, wie ich die Eigenschaften für die verschiedenen Gruppen programmatisch festlegen soll.
Re: Overlay Plot Farbe anpassen (Zeilenfarben)Ich denke, dass Sie mehr Glück haben, wenn Sie die gewünschten Farben beibehalten, indem Sie die Spalteneigenschaft "Wertfarben" für die Spalten festlegen, mit denen Sie arbeiten.Zum größten Teil sind "Wertfarben" die Standardeinstellungen von JMP.