如何通過 JSL 從剪貼板粘貼圖形;或者:如何創建一個獨立的圖例?大家好,
我已經達到了我的(相當有限的)腳本技能的極限,正在尋求幫助。
我目前正在嘗試做的是基於“按列顏色”或行圖例創建一個圖例,該圖例不會附加到某個圖,但可以放置在單獨的大綱框等中。
我嘗試這樣做的原因是,我正在編寫一個 JSL 腳本,該腳本最終將從數據庫中檢索一大堆數據,並為具有不同圖例的不同流程步驟提供大量可視化效果。 最重要的是,我想將其作為交互式 html 文件分發。 由於會有很多圖表,因此需要大量滾動,我希望生成一個大綱框/滾動框對齊,其中圖例和一些書面信息在滾動圖表時應該保持可見(在窗口的單獨部分)。
到目前為止,我成功做到的是將生成的圖例的邊框框複製到剪貼板(一個是指安裝了“行圖例”的通用單向圖)
rOne = One << report;
Link = rone[Owner Box(1)] << parent;
show (Link);
Link << copy picture
它將圖例邊框框複製到剪貼板。 例如,我可以將其粘貼到 Word 中,並準確獲取我正在尋找的內容。 不幸的是,我找不到 JSL 命令來將剪貼板中的圖形粘貼到可視化中。 我在圖片框環境中通過“獲取剪貼板”進行了嘗試,但此命令似乎僅適用於文本。
有誰知道是否可以從剪貼板粘貼圖形?
或者,是否有人有一個代碼片段,允許創建一個獨立的圖例(我嘗試從行狀態轉換它,但沒有走得太遠)?
任何幫助是極大的讚賞。
問候
馬爾特
大規模定制回复:如何通過 JSL 從剪貼板粘貼圖形;或者:如何創建一個獨立的圖例?你好,約翰,
我會這樣做,但只有在我嘗試確保交互式 html 環境中確實有一個關於滾動框的主題,而不是在我的代碼中(這是我第一次嘗試使用滾動框,可能還有一些改進的空間:) )
問候
馬爾特回复:如何通過 JSL 從剪貼板粘貼圖形;或者:如何創建一個獨立的圖例?馬耳他,
請發送有關交互式 HTML 問題的更多詳細信息。
如果您不願意與社區分享,請給我發送私人消息或向技術支持報告問題。
謝謝,
〜約翰
回复:如何通過 JSL 從剪貼板粘貼圖形;或者:如何創建一個獨立的圖例?感謝您的輸入@多發性硬化症。
我真的很喜歡直接從數據表創建圖例的想法。 這可能會非常方便,儘管在腳本的末尾,會有一大堆圖例窗口漂浮在周圍......回复:如何通過 JSL 從剪貼板粘貼圖形;或者:如何創建一個獨立的圖例?非常感謝您提供快速簡單的解決方案@Melanie_J_Drake ,儘管我決定採用更雄心勃勃的 danschikore 解決方案:)回复:如何通過 JSL 從剪貼板粘貼圖形;或者:如何創建一個獨立的圖例?非常感謝, @danschikore 。 你的解決方案很棒。 我不得不稍微修改你的代碼以使其適合我的可視化方案,但它工作得很好。
我在滾動框顯示方面仍然遇到一些問題,但這似乎是交互式 html 可視化中的一些錯誤(例如數據消失;在一個特別有趣的情況下,繪圖沒有顯示在 JMP 環境中,但在保存為交互式 html 時確實顯示了(儘管有些扭曲))。
非常感謝你的工作
問候
馬爾特
回复:如何通過 JSL 從剪貼板粘貼圖形;或者:如何創建一個獨立的圖例?所有這些答案都很棒!
我只是想補充 gzmorgan0 關於許多交互式 HTML 文件的建議。 創建 HTML 用戶界面以引用多個交互式 HTML 文件的一種方法是使用 JMP 主菜單中的文件 > 發布。 它將為您的交互式 HTML 報告創建一個帶有縮略圖的 HTML 用戶界面。 可以使用新 Web 報告在 JSL 中實現自動化。 以下是腳本索引的摘錄:
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp", Invisible );
webreport =
New Web Report(
Add Report(
Distribution(
Continuous Distribution(
Column( :weight )
),
Nominal Distribution( Column( :age ) )
),
Title( "Distribution Web Report" ),
Description(
"This report was created with the sample found in the Scripting Index"
)
)
);
file = webreport << Save( "$TEMP" );
If( !Is Empty( file ),
Web( file )
);
該示例僅添加一份報告,但您可以添加任意數量的報告。 它還保存到臨時位置,但您可以將其設置為共享網絡驅動器,然後將該位置發送給您的同事。
回复:如何通過 JSL 從剪貼板粘貼圖形;或者:如何創建一個獨立的圖例?@danschikore ,那真是太酷了。
這是使用數據過濾器上下文框的另一種選擇。 我認為編寫腳本更容易一些,並且允許對交互式 HTML 進行多個過濾器。 它沒有JMP圖例,但數據過濾器功能強大。下面提供了一個示例。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
nw = New Window( "Shared Local Filter",
Data Filter Context Box(
H List Box(
Current Data Table() << Data Filter( Local, Add Filter( columns( :sex ) ) ),
ScrollBox(
Platform(
Current Data Table(),
biv = Bivariate(
X( :height ),
Y( :weight ),
By( :age ),
)
)
)
)
)
);
_xxx = biv<< Xpath("//FrameBox");
_xxx << {MarkerSize(6)};
_xxx << RowLegend("sex", color(1), Marker(1)); //this will just be a reminder
nw << Save Interactive HTML("C:/temp/SharedLocalFilter.html");
@MJE如果您確實有很多報告,而不是滾動報告,您可能需要考慮為 JMP 創建的交互式 HTML 頁面/文件創建自己的 HTML 界面。互聯網上有許多 html 搜索 UI 的示例。
回复:如何通過 JSL 從剪貼板粘貼圖形;或者:如何創建一個獨立的圖例?JMP 在某些地方使用剪貼板中的內容 - 通常與復製到剪貼板的方法配對,例如軸<<複製軸設置和axis<<粘貼軸設置。
對於您的用例,我建議複製或移動框而不是創建圖像。要從行圖例複製,您可以執行以下操作:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
framebox = rbiv[Frame Box( 1 )];
framebox << Row Legend( "age", color( 1 ), Marker( 1 ) );
subset = dt<<GET rows="" where=""> 58 & :weight < 95);
w = New Window("Custom Report",
H List Box(
Graph Box(FrameSize(300,300),MarkerSeg(:weight[subset], :height[subset],Row States(dt, subset))),
(biv<<REPORT></REPORT></GET>
導出為 HTML 時,圖例仍會轉換為圖像,但這會將所有內容保留為 JMP 中的 JMP 顯示框。但是,您會注意到克隆的圖例不像原始圖例那樣可單擊。使用從......中去除()和插入() ,您可以重新排列框而無需克隆它們。這使得可滾動報告類似於您的建議:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ), by( :age ) );
rbiv = biv[1] << report;
framebox = rbiv[Frame Box( 1 )];
framebox << Row Legend( "sex", color( 1 ), Marker( 1 ) );<BR />
// extract legend and report
legend = rbiv[OwnerBox(1)];
legendparent = legend<<PARENT></PARENT>// rearrange into a scrolled layout
toprpt << Append(hlist = HListBox(scrollbox=VScrollBox(800)));
InsertInto(scrollbox, fullrpt, 1);
InsertInto(hlist, legendbox, 2);
回复:如何通過 JSL 從剪貼板粘貼圖形;或者:如何創建一個獨立的圖例?可以使用主菜單(“粘貼”)從剪貼板粘貼,但它不是很有用(很難用 jsl 控制時間和目標)。
不確定你想要什麼,但我確信有比通過此處的剪貼板更好的選擇。
下面是一個可能有用的示例:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/big class.jmp");
ow = Report(dt << Oneway(Y(:Height), X(:Age)));
rl = dt << Color By Column(:Age, Make Window With Legend);
nw = New Window("row legend",
H List Box(Scroll Box(Size(400, 600), V List Box(ow, ow, ow, ow)), rl)
);
// nw << Save Interactive HTML("path/example.html");
回复:如何通過 JSL 從剪貼板粘貼圖形;或者:如何創建一個獨立的圖例?我不確定你到底想做什麼,但“獲取圖片”可能正是你所需要的。 它為您提供一個圖片對象,然後您可以將其放入 JMP 顯示樹中。 以下是腳本索引中的示例:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
New Window( "Example", rbiv << Get Picture );
這就是您要找的嗎? 這只是一個靜態圖片,而不是交互式的。
回覆:如何透過 JSL 從剪貼簿貼上圖形;或:如何建立一個獨立的圖例?我想為 AddIn 新增第二種模式https://marketplace.jmp.com/appdetails/Image+to+Table經過@Jed_Campbell .
插件從硬碟載入圖像。在某些情況下,從剪貼簿貼上影像可能會有所幫助。
是否有一個 JSL 命令可以從剪貼簿貼上圖形?
回覆:如何透過 JSL 從剪貼簿貼上圖形;或:如何建立一個獨立的圖例?
是否有 JSL 命令可以從剪貼簿貼上圖形?
我認為目前沒有辦法使用 JSL 來做到這一點。也許這是JMP 願望清單的一個不錯的候選人?
回覆:如何透過 JSL 從剪貼簿貼上圖形;或:如何建立一個獨立的圖例?好的,這裡是: 從剪貼簿貼上圖形