Erstellen Sie ein horizontales Zeitachsen-Balkendiagramm mit variierender Kategorie im ZeitverlaufHallo zusammen,
Ich habe eine Datentabelle mit einer Reihe von Einheiten, die für unterschiedliche Zeiträume in verschiedene Kategorien fallen.Dieser Datensatz ist in der Datentabelle wie folgt definiert: Es gibt vier Datenspalten – (i) Einheitenkennung (eine diskrete Zahl), (ii) Startdatum, (iii) Enddatum und (iv) Kategorie.Die Kategoriespalte listet die Kategorien auf, in die die Einheit zwischen der Start- und Endzeit fällt.Eine bestimmte Einheit kann über mehrere Datenzeilen verfügen, die verschiedenen Zeiträumen entsprechen.Die Datentabelle ist wie beigefügt.
Ich versuche, ein Diagramm zu erstellen – mit der X-Achse als Zeit und der Y-Achse als Einheit. Für jede Einheit benötige ich ein horizontales Balkendiagramm, das die Kategorie für den angegebenen Zeitraum in einer Farbe anzeigt.Ich füge eine Diagrammskizze bei, um zu zeigen, wie das Diagramm aussehen sollte.Die Skizze soll meine Vorstellung von der Grafik vorantreiben.
Ich habe mein Bestes gegeben, konnte aber nicht das finden, was ich suchte.Vielen Dank für Ihre Hilfe.Entweder über einen Graph Builder oder ein JSL-Skript ist in Ordnung.Ich verwende JMP 16 pro.
Datenexploration und -visualisierungBetreff: Erstellen Sie ein horizontales Zeitachsen-Balkendiagramm mit variierender Kategorie im ZeitverlaufHier ist der Anfang eines Skripts, das Sie erweitern können sollten.Ich habe das Gantt-Add-on ausgeführt, das nicht mehrere Bereiche pro Zeile zulässt, und dem Skript einige Elemente hinzugefügt, die das tun, was Sie wollen.

Names Default To Here( 1 );
dt = Current Data Table();
gb = Graph Builder(
Size( 1121, 626 ),
Show Control Panel( 0 ),
Variables(
X( :Start Date ),
X( :End Date, Position( 1 ) ),
Y( :Unit/*, Order By( :Start Date, Descending, Order Statistic( "Mean" ) )*/ )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 32 ), Bar Style( "Range" ) ) ),
SendToReport(
Dispatch(
{},
"Start Date",
ScaleBox,
{Min( 3790824458.85 ), Max( 3734876513.055 ), Interval( "Week" ), Inc( 1 ), Minor Ticks( 0 ),
Label Row( Label Orientation( "Angled" ) )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
32,
Level Name( 0, "Span of Task", Item ID( "Mean(Start Date)..Mean(End Date)", 1 ) ),
Properties( 0, {Fill Color( 2 )}, Item ID( "Mean(Start Date)..Mean(End Date)", 1 ) )
)}
),
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Gantt Chart" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Text( "Date" )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "Tasks" )} )
)
);
// set axis values
offset = (Col Max( :end date ) - Col Min( :end date )) / 20;
gbr = gb << report;
gbr["Graph Builder", AxisBox( 1 )] << Min( Col Min( :start date ) - offset );
gbr["Graph Builder", AxisBox( 1 )] << Max( Col Max( :end date ) + offset );
// Add the display
gbr["Graph Builder", FrameBox( 1 )] << Add Graphics Script(
// Get Category values
Summarize( dt, catGroups = by( :Category ) );
For Each Row(
Fill Color( Contains( catGroups, :category ) + 2 );
Rect( :Start Date, Num( :unit ) - .9, :End Date, Num( :unit ) - 1.1, fill = 1 );
);
)
;
Betreff: Erstellen Sie ein horizontales Zeitachsen-Balkendiagramm mit variierender Kategorie im ZeitverlaufVielen Dank!Ihre Lösung entspricht fast genau dem, was ich gesucht habe.Ich konnte nicht ganz verstehen, wie Sie die Daten manipuliert haben, um für jeden Zeitraum unterschiedliche Farbbalken zu erhalten.Hier sind zwei Fragen aus Ihrem Skript:
1. Wie kann ich die Legende für jede Kategorie anzeigen?oben rechts? - wie die Werte A,B,C,D,E usw. in der Tabelle?Ist es auch möglich, sie über oder innerhalb jedes Farbbalkens für jede Einheit anzuzeigen?
2. Ich sehe weiße rechteckige Räume hinter den farbigen roten Balken.Was sind das und kann ich sie nicht in der Grafik anzeigen?
Vielen Dank für Ihre Hilfe, dies weiter zu verfeinern.Vielen Dank!
Betreff: Erstellen Sie ein horizontales Zeitachsen-Balkendiagramm mit variierender Kategorie im ZeitverlaufJMP verfügt nicht über ein integriertes Diagramm, um das zu produzieren, was Sie wollen.Es besteht jedoch die Möglichkeit, Standarddiagramme zu ändern, um das gewünschte Ergebnis zu erzielen.Die JSL, die ich zuvor bereitgestellt habe und der ich weitere Anmerkungen hinzugefügt habe und die unten aufgeführt ist, verwendet also die Graph Builder-Plattform, um das allgemeine Formular für das erforderliche Diagramm zu erstellen, aber dann fügt das Skript Grafiken hinzu, die die gewünschten Ergebnisse liefern, und löscht die ursprünglichen Ergebnisse.In meiner ersten Auflistung des Skripts habe ich lediglich die vom Original-GB erzeugten Balken so geändert, dass sie in Weiß angezeigt werden.Ich habe das jedoch geändert, um nur die ursprünglichen Balken zu löschen.Die Originalbalken sind das, was Sie im Hintergrund des Diagramms sehen.
Was die Legende betrifft, muss sie erstellt werden.Sie müssen sich dieser Herausforderung stellen.Zuerst müssen Sie das aktuelle Skript studieren.Rea
Names Default To Here( 1 );
dt = Current Data Table();
// The Graph Builder Platform currently does not have the capability to create the
// needed Gantt like chart. The main issue is that it does not apppear that Graph
// Builder can display more than one Range Bar on a given line. If more than one
// range is input, then Graph Builder averages the start values and then averages
// the end values, and creates a range bar with the averaged values.
// However, Graph Builder does create a display window with the correct Axes etc.
// So the JSL below runs the Graph Builder Platform, and then adds the Gantt like
// bars, and then finally, deletes the original bars that Graph Builder created.
gb = Graph Builder(
Size( 1121, 626 ),
Show Control Panel( 0 ),
Variables(
X( :Start Date ),
X( :End Date, Position( 1 ) ),
Y( :Unit )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 32 ), Bar Style( "Range" ) ) ),
SendToReport(
Dispatch(
{},
"Start Date",
ScaleBox,
{Min( 3790824458.85 ), Max( 3734876513.055 ), Interval( "Week" ), Inc( 1 ), Minor Ticks( 0 ),
Label Row( Label Orientation( "Angled" ) )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
32,
Level Name( 0, "Span of Task", Item ID( "Mean(Start Date)..Mean(End Date)", 1 ) )
)}
),
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Gantt Chart" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Text( "Date" )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "Tasks" )} )
)
);
// set axis values of the graph to make sure the complete date range is displayed
// Set the min date displayed to the earliest date - 5% of the overall range
// Set the max date displayed to the latest date + 5% of the overall range
offset = (Col Max( :end date ) - Col Min( :end date )) / 20;
gbr = gb << report;
gbr["Graph Builder", AxisBox( 1 )] << Min( Col Min( :start date ) - offset );
gbr["Graph Builder", AxisBox( 1 )] << Max( Col Max( :end date ) + offset );
// Add the color bars to the display
gbr["Graph Builder", FrameBox( 1 )] << Add Graphics Script(
// Get Category values
Summarize( dt, catGroups = by( :Category ) );
// Loop through each row in the data table and draw a filled rectangle on the
// display
For Each Row(
Fill Color( Contains( catGroups, :category ) + 2 );
Rect( :Start Date, Num( :unit ) - .9, :End Date, Num( :unit ) - 1.1, fill = 1 );
);
);
// Delete the bars created by Graph Builder
theBarSeg = gbr["Graph Builder", FrameBox( 1 )] << find seg( bar seg);
theBarSeg << delete;
Lesen Sie das Scripting-Handbuch und machen Sie sich mit dem Scripting-Index vertraut.Dann können Sie sich an den Aufbau der Legende machen.