JMPプロ17.2
オーバーレイ(線を区切るため)と色(関連する線に同じように色を付けるため)の両方を使用したいプロットがあります。これはうまく機能しますが、フレームボックスを抽出するとすべての色が失われます。ピクチャボックスを取得することで色を維持できますが、X 軸が始まる位置より前のプロットの左オフセットを計算する方法がわかりません。 y 軸の幅と y 軸のラベル (テキスト編集ボックス) を使用する必要があるようですが、テキスト編集ボックスは幅 -1 を返します。
左側のマージンを計算する良い方法、またはすべてのカラーリングをフレームボックス内に保持する(より良い)方法はありますか?
// 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 ) ) )
);
面白いアプローチですね!すべてをフレームボックス内に収めることができれば、より簡単になります...グラフの座標系で使用するだけです。おそらく、ディスプレイボックスの整数座標系と格闘し、適切な原点を見つけようとしているのではないかと思います。また、グラフを軸から切り離します (スケールのドラッグなどは機能しません)。
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.グラフィックス スクリプトをフレームボックスに追加して、カスタム表示を作成します。