JMP Pro17.2
Ho una trama in cui desidero utilizzare sia la sovrapposizione (per separare le linee) che il colore (per colorare le linee correlate allo stesso modo). Funziona benissimo, ma perdo tutti i colori quando estraggo il framebox. Posso mantenere i colori afferrando la casella di immagine, ma non so come calcolare l'offset sinistro nella trama prima del punto in cui inizia l'asse x. Sembra che dovrei usare la larghezza dell'asse y più l'etichetta dell'asse y (casella di modifica del testo), tuttavia la casella di modifica del testo restituisce una larghezza di -1.
Esiste un buon modo per calcolare il margine sinistro o (meglio) un modo per mantenere tutta la colorazione nel 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 ) ) )
);
Approccio interessante! Se riesci a tenere tutto all'interno della cornice, sarà più semplice...basta usarlo con il sistema di coordinate del grafico. Sospetto che dovrai combattere con il sistema di coordinate intere per le caselle di visualizzazione e provare a trovare le origini corrette; inoltre scollegherai il grafico dagli assi (trascinare le scale, ecc. non funzionerà).
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.Aggiungi uno script grafico al framebox per creare visualizzazioni personalizzate.