JMP Pro 17.2
J'ai un tracé dans lequel je souhaite utiliser à la fois la superposition (pour séparer les lignes) et la couleur (pour colorer les lignes liées de la même manière). Cela fonctionne très bien, mais je perds toutes les couleurs lors de l'extraction du framebox. Je peux conserver les couleurs en saisissant la zone d'image, mais je ne sais pas comment calculer le décalage gauche dans le tracé avant le début de l'axe des x. Il semble que je devrais utiliser la largeur de l'axe y plus l'étiquette de l'axe y (zone d'édition de texte), mais la zone d'édition de texte renvoie une largeur de -1.
Existe-t-il un bon moyen de calculer la marge de gauche ou (mieux) un moyen de conserver toutes les couleurs dans la framebox ?
// illustrate technique and problem
dt = New Table( "frame_box_ex",
Add Rows( 48 ),
New Column( "X",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Selected,
Set Values(
[1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8,
1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8]
)
),
New Column( "Y",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[1.45808886692691, 2.39035819973415, 2.99796363989942, 4.0175538469545,
4.97635791617404, 5.26099494066037, 6.35297458603344, 7.08128130389934,
1.28206570793684, 2.65813273844257, 3.90780332034481, 5.56931861718803,
6.5102957541246, 7.85452087528389, 8.38346720371831, 9.83684443692199,
1.07112111561808, 1.80813159968191, 3.60012537918958, 4.59349059340839,
6.0331086735015, 7.38976749487193, 8.09249962943829, 8.6144549883821,
0.793139090953735, 1.29469742405061, 1.76519280701643, 2.08182485552223,
2.78446654871733, 3.65492098470701, 4.60137160145799, 5.4641050584207,
-0.0498633817348688, 0.867775467257285, 2.19640092615135,
3.8415359972872, 5.73235903219136, 6.60516876928658, 7.45020127543143,
8.66546760100397, 0.781073560404989, 1.96654139416073, 2.08763174310172,
2.25180062442375, 3.88484451908061, 4.67635031701802, 5.77656366166124,
6.97420411204293]
)
),
New Column( "Unit",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6]
)
),
New Column( "Group",
Numeric,
"Nominal",
Format( "Best", 12 ),
Set Values(
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
)
)
);
gb = dt << Graph Builder(
Size( 600, 600 ),
Variables( X( :X ), Y( :Y ), Overlay( :Unit ), Color( :Group ) ),
Elements( Line( X, Y, Legend( 14 ) ) ),
SendToReport(
Dispatch(
{},
"X",
ScaleBox,
{Min( 0 ), Max( 8 ), Inc( 1 ), Minor Ticks( 0 )}
)
)
);
nw = New Window( "for testing",
Outline Box( "complicated plot",
Spacer Box( Size( 2, 10 ) ),
lu1 = Lineup Box( N Col( 3 ), Spacing( 0 ) )
)
);
lu1 << Append( Report( gb )[AxisBox( 2 )] );
lu1 << Append( Report( gb )[FrameBox( 1 )] );
lu1 << Append( Report( gb )[LegendBox( 1 )] );
//end of row
lu1 << Append( Spacer Box() );
lu1 << Append( Report( gb )[AxisBox( 1 )] );
lu1 << Append( Spacer Box() );
//end of row
lu1 << Append( Spacer Box() );
lu1 << Append( insrt_icons = H List Box() );
lu1 << Append( Spacer Box() );
numXAxisWidth = (gb << report)[AxisBox( 1 )] << get width;
numSteps = N Items( Associative Array( Column( dt, "X" ) ) << get keys );
numOneIncr = (numXAxisWidth) / (numSteps);
For( _i = 1, _i <= numSteps, _i++,
insrt_icons << Append( Spacer Box( Size( numOneIncr, numOneIncr ), Color( _i ) ) )
);
Approche intéressante ! Si vous pouvez tout conserver à l'intérieur de la zone du cadre, ce sera plus facile... utilisez simplement le système de coordonnées du graphique. Je soupçonne que vous allez vous battre avec le système de coordonnées entières pour les boîtes d'affichage et essayer de trouver les origines appropriées ; vous déconnecterez également le graphique des axes (faire glisser les échelles, etc. ne fonctionnera pas.)
dt = New Table( "frame_box_ex",
Add Rows( 48 ),
New Column( "X",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Selected,
Set Values(
[1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6,
7, 8]
)
),
New Column( "Y",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[1.45808886692691, 2.39035819973415, 2.99796363989942, 4.0175538469545, 4.97635791617404, 5.26099494066037, 6.35297458603344,
7.08128130389934, 1.28206570793684, 2.65813273844257, 3.90780332034481, 5.56931861718803, 6.5102957541246, 7.85452087528389,
8.38346720371831, 9.83684443692199, 1.07112111561808, 1.80813159968191, 3.60012537918958, 4.59349059340839, 6.0331086735015,
7.38976749487193, 8.09249962943829, 8.6144549883821, 0.793139090953735, 1.29469742405061, 1.76519280701643, 2.08182485552223,
2.78446654871733, 3.65492098470701, 4.60137160145799, 5.4641050584207, -0.0498633817348688, 0.867775467257285, 2.19640092615135,
3.8415359972872, 5.73235903219136, 6.60516876928658, 7.45020127543143, 8.66546760100397, 0.781073560404989, 1.96654139416073,
2.08763174310172, 2.25180062442375, 3.88484451908061, 4.67635031701802, 5.77656366166124, 6.97420411204293]
)
),
New Column( "Unit",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
6, 6]
)
),
New Column( "Group",
Numeric,
"Nominal",
Format( "Best", 12 ),
Set Values(
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2]
)
)
);
gb = dt << Graph Builder(
Size( 600, 600 ),
Show Control Panel( 0 ),
Variables( X( :X ), Y( :Y ), Overlay( :Unit ), Color( :Group ) ),
Elements( Line( X, Y, Legend( 14 ) ) ),
SendToReport(
Dispatch( {}, "X", ScaleBox, {Min( 0 ), Max( 9 ), Inc( 1 ), Minor Ticks( 0 )} ),
Dispatch( {}, "Y", ScaleBox, {Min( -1 ), Max( 10.1 ), Inc( 2 ), Minor Ticks( 0 )} )
)
);
Report( gb )[framebox( 1 )] << addgraphicsscript(
Text( {1, 8}, JMP Version() );
For( here:x = 1, here:x < 8, here:x += 1,
Fill Color( HLS Color( here:x / 9, .5, 1 ) );
Rect( here:x, -.2, here:x + 1, -.8, 1 );
Fill Color( "white" );
Circle( {x + .5, -.5}, .25, "FILL" );
Text Color( "black" );
Text Size( 12 );
Text( center justified, {x + .5, -.65 /*vertical centering depends on text size*/}, Substr( "ABCDEFG", x, 1 ) );
);
);
Add a graphics script to the framebox to make custom displays.Ajoutez un script graphique à la framebox pour créer des affichages personnalisés.