Cree un gráfico de barras horizontales en la línea de tiempo con categorías variables a lo largo del tiempoHola a todos,
Tengo una tabla de datos con un montón de unidades que se dividen en diferentes categorías para diferentes períodos de tiempo.Este conjunto de datos se define en la tabla de datos como se muestra a continuación: Hay cuatro columnas de datos: (i) identificador de unidad (un número discreto), (ii) fecha de inicio, (iii) fecha de finalización y (iv) categoría.La columna de categoría enumera las categorías en las que se encuentra la unidad entre la hora de inicio y finalización.Una unidad determinada puede tener varias filas de datos correspondientes a varios períodos.La tabla de datos es la adjunta.
Estoy intentando crear un gráfico, con el eje X como tiempo, el eje Y como unidad y, para cada unidad, necesito un gráfico de barras horizontales que muestre la categoría por un color para el período de tiempo determinado.Adjunto un boceto del gráfico para mostrar cómo debería verse el gráfico.El boceto es para impulsar mi idea del gráfico.
Hice lo mejor que pude, pero no pude llegar a lo que buscaba.Agradezco su ayuda en esto.Ya sea a través de un generador de gráficos o un script JSL, está bien.Estoy usando JMP 16 pro.
Exploración y visualización de datosRe: Crear un gráfico de barras horizontales en la línea de tiempo con categorías variables a lo largo del tiempoAquí está el comienzo de un script que debería poder ampliar.Ejecuté el complemento Gantt, que no permite múltiples rangos por línea, y agregué algunos elementos al script que hace lo que usted desea.

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 );
);
)
;
Re: Crear un gráfico de barras horizontales en la línea de tiempo con categorías variables a lo largo del tiempo¡Muchas gracias!Tu solución es casi exacta a lo que estaba buscando.No pude entender completamente cómo manipuló los datos para obtener barras de colores diferentes para cada período de tiempo.Aquí hay 2 preguntas de su guión:
1. ¿Cómo puedo mostrar la leyenda de cada categoría?en la parte superior derecha? - ¿Te gustan los valores A, B, C, D, E, etc. de la tabla?¿También es posible mostrarlos arriba o dentro de cada barra de color para cada unidad?
2. Veo espacios rectangulares de color blanco detrás de las barras de color rojo.¿Cuáles son y no puedo mostrarlos en el gráfico?
Agradecemos su ayuda para refinar esto aún más.¡Muchas gracias!
Re: Crear un gráfico de barras horizontales en la línea de tiempo con categorías variables a lo largo del tiempoJMP no tiene un gráfico integrado para producir lo que desea.Sin embargo, tiene la capacidad de modificar los gráficos predeterminados para obtener lo que desea.Entonces, el JSL que proporcioné antes, al que le agregué más anotaciones y que se enumera a continuación, utiliza la plataforma Graph Builder para crear el formulario general para el gráfico requerido, pero luego el script le agrega gráficos, lo que proporciona los resultados deseados, y elimina los resultados originales.En mi primera lista del script, simplemente cambié las barras producidas por el GB original para que se muestren en blanco.Sin embargo, lo cambié para eliminar simplemente las barras originales.Las barras originales son lo que ves en el fondo del gráfico.
En cuanto a la Leyenda, es necesario crearla.Necesitas asumir ese desafío.Primero, debes estudiar el guión actual.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;
Consulte la Guía de secuencias de comandos y familiarícese con el Índice de secuencias de comandos.Entonces podrás encargarte de la construcción de la leyenda.