Wie fügt man dynamische horizontale Linien mit einer gemeinsamen Y-Achse in ein Variabilitätsdiagramm mit gruppierter X-Achse mit Wiederholungswerten unterschiedlicher N ein?Hallo zusammen,
Ich wollte einen neuen Thread erstellen, um auf Grundlage meines vorherigen Beitrags zu differenzieren: https://community.jmp.com/t5/Discussions/How-to-add-Dynamic-horizontal-line-by-shared-y-axis-among/mp/622722 . Dieselbe Idee ist anzuwenden, wenn ich eine dynamische horizontale Linie über einem Variabilitätsdiagramm haben möchte, aber anders als bei der vorherigen Lösung, die ein assoziatives Array verwendet, da es einen Wert pro x gibt, hat dieser Fall möglicherweise mehrere Werte pro x-Gruppierung, in der die grafische Darstellung basierend auf N pro x nicht funktioniert, da N zwischen den Bedingungen aufgeteilt wird und als solche gezeichnet werden muss. Hier habe ich Schwierigkeiten herauszufinden, wie das geht, und wäre dankbar, wenn mir jemand mit mehr Erfahrung im Bereich der Diagrammskriptung helfen könnte, wenn möglich. Unten ist die gewünschte Ausgabe beispielsweise mit handgezeichneten Linien und der Code zum Generieren des Diagramms ist ebenfalls weiter unten.
Im folgenden Beispiel ist Toyota nun unter :Protection aufgeteilt, wobei N=8 und N=3 ist und Ford ebenso N=11 und N=3 für die Gruppierungen hat. Ich möchte sicherstellen, dass sowohl die Toyota-Gruppen als auch die Ford-Gruppen unter anderen eine horizontale Linie mit dem Wert von Max(:Wt) haben, wie durch die roten und blauen Linien gezeigt, und alle anderen eine ebenso eindeutige Linie haben, wie durch die violetten Linien gezeigt. Jede Idee, wie man das erreichen könnte, wäre fantastisch. Unten im Beitrag ist der Code von @ErraticAttack als wunderbare Vorlage zum Gruppieren und Grafisieren veröffentlicht, aber da es sich um ein assoziatives Array handelt, würde es heißen, Toyota sei N: 8+3 = 11 und Ford ebenso 11+3=14 breit und die Bereiche würden falsch grafisch dargestellt, da sie nun aufgeteilt sind. 
dt = Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Protection, :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
By( :NAME("D/P")),
);@ErraticAttacks Code zur Unterstützung meiner vorherigen Frage.
names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" ),
);
//find groupings:
rows = dt << Get Rows Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" );
subt = dt << Subset( Rows( rows ), Columns( :Make, :Model, :Wt ), Not Linked, Private );
sumt = subt << Summary( Group( :Make, Model ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( subt, No Save );
subt = sumt << Summary( Group( :Make ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( sumt, No Save );
category number = [=>];
category average = [=>];
For Each Row( subt,
category number[:Make] = :N Rows; // each least-significant category in a VariabilityPlot is exactly X=1 width on the hidden x-axis, starting at zero
category average[:Make] = :Wt
);
Close( subt, No Save );
tree = rpt << Report;
Eval( Eval Expr(
tree[FrameBox( 1 )] << Add Graphics Script(
Local( {values = Expr( category average ), numbers = Expr( category number ), i, items, sum = 0},
items = numbers << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += numbers[items[i]], values[items[i]]} ) );
0
)
)
)
) )Vielen Dank, ich bin für jede Hilfe wirklich dankbar!
Automatisierung und SkriptingGrundlegende Datenanalyse und ModellierungDatenexploration und -visualisierungMassenanpassungWindowsBetreff: Wie fügt man in einem Variabilitätsdiagramm mit gruppierter X-Achse mit Wiederholungswerten unterschiedlicher N dynamische horizontale Linien mit einer gemeinsamen Y-Achse hinzu?Danke, Jim!
Betreff: Wie fügt man in einem Variabilitätsdiagramm mit gruppierter X-Achse mit Wiederholungswerten unterschiedlicher N dynamische horizontale Linien mit einer gemeinsamen Y-Achse hinzu?In Zeile 37 wechseln Sie von
fb = Report(varchart)[i][FrameBox(1)];
Zu
fb = Report( varchart[i] )[FrameBox( 1 )];
Betreff: Wie fügt man in einem Variabilitätsdiagramm mit gruppierter X-Achse mit Wiederholungswerten unterschiedlicher N dynamische horizontale Linien mit einer gemeinsamen Y-Achse hinzu?Hallo @jthi ,
Danke für die Lösung, das ist eine ziemlich elegante Antwort. Wie Sie erwähnt haben, ist es nur für eine Framebox und ich hätte es idealerweise gerne, wenn es für beide Frameboxen funktioniert, die das Variabilitätsdiagramm generiert. Ich habe Ihren Code entsprechend angepasst, aber ich komme nicht weiter damit, die horizontalen Linien für beide anzuzeigen. Wenn Sie den Fehler sehen und wissen, wie Sie vorgehen müssen, wäre das fantastisch. Danke!
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :Make, :Model),
Analysis Type("Choose best analysis (EMS REML Bayesian)"),
Show Range Bars(0),
Show Cell Means(0),
Std Dev Chart(0),
Points Jittered(1),
By(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
//Invisible
);
uniq = Associative Array( Column( dt, "D/P" ) << GetValues ) << GetKeys;
for(i = 1, i <= N Items(uniq), i++,
dt_summary_subset = dt_summary << Subset( Rows( dt_summary << get rows where(Substr(:Group, 1, Length(uniq[i])) == uniq[i])),
Columns(), Not Linked);
weights = dt_summary_subset[0, "Wt"];
counts = dt_summary_subset[0, "Model"];
fb = Report(varchart)[i][FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
);Betreff: Wie fügt man in einem Variabilitätsdiagramm mit gruppierter X-Achse mit Wiederholungswerten unterschiedlicher N dynamische horizontale Linien mit einer gemeinsamen Y-Achse hinzu?Eine relativ einfache Möglichkeit besteht darin, eine neue Spalte für Ihre Gruppe zu erstellen.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
// for simplicity sake we drop Passenger
rows_to_delete = dt << Get Rows Where(:"D/P"n == "Passenger");
dt << Delete Rows(rows_to_delete);
varchart = dt << Variability Chart(
Y(:Head IC),
X(:Protection, :Make, :Model),
Analysis Type("Choose best analysis (EMS REML Bayesian)"),
Show Range Bars(0),
Show Cell Means(0),
Std Dev Chart(0),
Points Jittered(1),
By(:"D/P"n)
);
dt << new column("Group", Character, Nominal, Formula(
:"D/P"n || :Protection || :Make // don't add model here
));
dt_summary = dt << Summary(
Group(:Group),
Max(:Wt),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0),
Invisible
);
weights = dt_summary[0, "Wt"];
counts = dt_summary[0, "Model"];
Close(dt_summary, no save);
fb = Report(varchart)[FrameBox(1)];
Eval(Eval Expr(
fb << Add Graphics Script(
Local({refs = Expr(weights), counts = Expr(counts), i, sum = 0},
Pen Size(2);
Pen Color("Blue");
Summation(i = 1, N Items(counts),
Line(Eval List({sum, refs[i]}), Eval List({sum += counts[i], refs[i]}));
);
)
)
));
Beachten Sie, dass dieses Beispiel nur eine Framebox hat, da andere D/P weggelassen werden