将 Y 轴编写为对数刻度你好,
我有脚本使用堆叠数据制作多个直方图。 直方图中使用的 y 轴是堆叠数据列:Data,直方图中使用的 x 轴是堆叠数据列标签:化学化合物。 然后我使用 Page (:Sample ID) 将我的图表分成每个样本一张图表。 根据我使用脚本的数据集,我可能有 2 个样本或 100 个样本。 我的图表工作正常,但是,我希望 y 轴采用对数刻度。 我已经尝试了多种插入代码的方法来执行此操作,但是,我最多的工作是 1 个对数刻度的图形,而其他图形都是线性的。 我已附上代码。 正在工作的部分是“ScaleBox (2)”。它更改了要记录的第一个图表,但是,它将其余比例保留为线性。 如果我将“ScaleBox”后的 (2) 更改为 (3),则组中的第二个图将更改为对数,而其他图则保持线性。 如果我完全删除“ScaleBox”后面的 (#),则不会记录任何内容。 我还尝试将“Left Y Log Scale (1)”插入“变量”区域,但什么也没有。
我已附加一个数据集来与脚本一起运行。 任何对此的帮助将不胜感激!
谢谢你,
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Chemical Compound ), Y( :Data ), Page( :SampleID ) ),
Elements( Bar( X, Y, Legend( 10 ) ) ),
SendToReport(
Dispatch(
{},
"Data",
ScaleBox (2),
{Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ),
Minor Ticks( 1 )}
),
Dispatch( {}, "400", LegendBox, {Set Title( "" )} ),
)
);回复:将 Y 轴脚本编写为对数刻度你好!
我一直在使用这个解决方案来满足我的对数比例绘图需求。 效果很好。 但是,如果我想绘制大量样本(例如 > 50),则会出现错误(见下文)。 以前有人遇到过这个吗? 我尝试添加“wait();”之前和之后以及在不同的领域认为我的代码只是需要更多时间。 它适用于 < 50 个样本,任何以上都会产生错误。
文档深度过大:256 使用 XML_PARSE_HUGE 选项
在访问或评估 'Xpath' 时,Xpath( "//ScaleBox[@charID='Rel TEQ']" ) /*###*/
这是我的代码。
dtstacked3:Parameter3 << set property( "Row Order Levels", 1 );
dtstacked3:Sample ID << set property ("Row Order Levels",1);
gb3 = dtstacked3 << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Parameter3 ), Y( :Rel TEQ ), Page( :Sample ID ), Color( :Rel TEQ 2 ) ),
Elements( Bar( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch( {}, "400", ScaleBox, {Legend Model( 6, Properties( 0, {gradient(
{Color Theme(
{"Paired Copy 2 2502", 8193, {{254, 207, 132}, {254, 207,
132}, {254, 207, 132}, {254, 207, 132}, {254, 207, 132},
{254, 207, 132}, {114, 171, 187}, {114, 171, 187}, {114,
171, 187}, {114, 171, 187}, {114, 171, 187}}}
), Scale Values( [0 1] ), Width( 12 ), Discrete Colors( 1 )}
)}) )} ),
Dispatch( {}, "400", LegendBox, {Set Title( "" )} )
)
);
xx3 = gb3 << Xpath("//ScaleBox[@charID='Rel TEQ']");
xx3 << {Scale("Log"), Format("Best", 10), Min(0.1), Max(80), Inc(1), Minor Ticks(1)};
gb3 << on close( Close( dtstacked3, nosave ) );谢谢!
莱西
回复:将 Y 轴脚本编写为对数刻度感谢您提供这个解决方案! 我会再检查一下。
回复:将 Y 轴脚本编写为对数刻度我没有意识到 xpath 可以用于此目的。漂亮干净的解决方案!
回复:将 Y 轴脚本编写为对数刻度我喜欢使用 XPath()。 一条消息适用于找到的所有对象。 请参阅下面脚本的最后 2 行。《JSL Companion》第二版的第 6 章中有关于 Xpath() 和 Find() 的一节和示例脚本。 您可以在脚本索引 > 显示框 > 搜索 xpath 中找到一个简单的示例。要了解有关 XPath 语法和函数的更多信息,请单击这里
< https://www.tutorialspoint.com/xpath/xpath_quick_guide.htm >
gb = Graph Builder(
Show Control Panel( 0 ),
Variables( X( :Chemical Compound ), Y( :Data ), Page( :SampleID ) ),
Elements( Bar( X, Y, Legend( 10 ) ) ),
SendToReport(
// Dispatch(
// {},
// "Data",
// ScaleBox (2),
// {Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ),
// Minor Ticks( 1 )}
// ),
Dispatch( {}, "400", LegendBox, {Set Title( "" )} ),
)
);
xx =gb << Xpath( "//ScaleBox[@charID='Data']");
xx << {Scale( "Log" ), Format( "Best", 10 ), Min( 0.01 ), Max( 80 ), Inc( 1 ), Minor Ticks(1) };
回复:将 Y 轴脚本编写为对数刻度不幸的是,您必须将日志 Y 轴消息发送到每个图表页面。此代码有效,但在日志中显示错误。希望有人为您提供更清洁的解决方案。
编辑 2018 年 9 月 4 日我正在循环 id_list 而不是 unique_values。固定代码如下。
Get_unique_values = Function( {in_list},
{Default Local},
tmp = [=> 0];
Insert Into( tmp, in_list );
tmp << get keys;
);
dt = data table("Test Data");
id_list = column(dt, "Sample ID") << get values;
unique_values = get_unique_values(id_list);
gb = dt << Graph Builder(
Size( 530, 1460 ),
Show Control Panel( 0 ),
Variables( X( :Chemical Compound ), Y( :Data ), Page( :Sample ID ) ),
Elements( Bar( X, Y, Legend( 10 ) ) ),
);
for (i = 1, i <= nitems(unique_values), i++,
gb << SendToReport(
Dispatch( {}, "Data", ScaleBox( i + 1 ),
{Scale( "Log" ), Format( "Best", 10 )}
)
);
);