通過獲取列名幫助覆蓋圖大家好,希望有人可以幫助我。
我需要創建一個圖表,其中數字列的數量隨時更改,但最後我需要在Overlay圖中繪製所有我的數字列,如下面的腳本所示。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Overlay Plot( X( :name ), Y( :height, :weight ), Connect Thru Missing( 1 ) );
這是我嘗試過的但是圖表是分開創建的,我很想接受Y軸的指令。提前致謝。
dt = Data Table ("Big Class");
list = dt << get column names(numeric, continuous);
show (list);
For( i = 1, i <= N Items(list), i++,
Overlay Plot(
Y( Column( list[i] ) ),
X( :name ), Connect Thru Missing( 1 ) ) );Re:通過獲取列名幫助覆蓋圖這也是一種不同的方法,
謝謝你的支持 @ian_jmp 和 @女士
Re:通過獲取列名幫助覆蓋圖你的問題有兩個很好的解決方案。我將其添加為FYI,作為第三種選擇。
我喜歡使用列名作為文本。如果你有一個列名列表(字符串)某些平台(不是全部)需要Eval List(),所以我建議使用它proforma(標準)。
dt = Open("$SAMPLE_DATA/Big Class.jmp");
mylist = dt << get column names(numeric, continuous, string);
op = Overlay Plot(Y(EvalList(mylist)), X(:name), Connect Thru Missing(1));
Re:通過獲取列名幫助覆蓋圖謝謝 @ gzmorgan0 對於你的回复,我很感激。
我有一個額外的問題,如果案例是我有幾列數字,在我的表中連續,但我只是想用一些列創建我的疊加圖。
從循環中選擇列列表的最佳方法是什麼?
假設我希望循環只從第3列中選擇(第3列數字,繼續<= N項),或從第1列循環(第1列數字,繼續減少2總N項)。
先感謝您。
Re:通過獲取列名幫助覆蓋圖我完全不理解你的問題,所以我會給你一些指示。您應該閱讀列表並使用列表。例如,
mylist = words("abcdefghijklmnopqrstuvwxyz","");
show(mylist); // see the log list of characters a-z
show( mylist[ 3::nitems(mylist)-2 ] ); //see log c-x
我假設你想要在第3列之後開始,你知道前3列可能是什麼。因此,一種方法是獲取所有連續列名稱,並刪除前3列的名稱。
Re:通過獲取列名幫助覆蓋圖你好 @ gzmorgan0 抱歉我的問題不那麼清楚。
讓我嘗試更深入地解釋,有時候我的表包含5個或最多7列,然後從numeric / continuous列中,我想要排除第一列,或者另一個腳本將僅排除最後2列。當我說排除時,我指的是獲取列名稱可以排除它們。
有沒有辦法通過循環來做到這一點?
另一種選擇是,我的不受歡迎的列(如果是這種情況)總是在第一列或最後兩列有關列類型(數字,charcater等),是否還有一種方法來獲取trhough獲取列名稱使用環?
謝謝!!!
Re:通過獲取列名幫助覆蓋圖對不起,這還不是“水晶”。 當您引用第一列時,是表中的fitrst列還是第一個連續列?關於最後2列的相同問題。 另外,您知道要排除的列的名稱嗎?這應該區分大小寫嗎?
我有一種感覺,你可能會問如何跳過某些專欄。不知道你究竟在尋找什麼,這裡有一個可能有幫助的例子。 NOLIST 是要跳過的已知名稱列表。
Names Default to Here(1);
dt = Open("$sample_data/Semiconductor Capability.jmp");
cnames = dt << get column names("numeric", "String");
nolist = {"wafer", "site", "datetime"};
nw = New Window("Overlay Plots", lub = LineUpBox(ncol(3)));
For(i=1,i<=nitems(cnames), i++,
if (contains(nolist, lowercase(cnames[i]) ), continue() ); //next i
if( Col Number(column(cnames[i]) ) == 0 | Col Std Dev(column(cnames[i])) == 0, continue() ); //next i, no need to plot a constant.
//otherwise
vl = VlistBox(op = Overlay Plot(Y( Column(cnames[i])), X(:lot_id) ) );
Report(op)[OutlineBox(1)] << set title("Overlay Plot: " || cnames[i] || " vs. lot_id");
lub << append(vl);
);
如果您不知道要跳過的名稱,您只需知道它們在表中的某些位置,創建一個 NOLIST
//or create nolist
nolist = {};
Insert Into(nolist, Column(dt,1) << get name);
Insert Into(nolist, Column(dt, ncol(dt)-1) << get name);
Insert Into(nolist, Column(dt, ncol(dt)) << get name);
show(nolist);
您也可以從cnames中刪除這些名稱。[我不確定這些位置的確切位置。]如果您只想刪除1和最後2個連續列,只需獲取腳本中顯示的所有連續列,然後
cnames = cnames[ 2::nitems(cnames)-2 ];
現在cnames不再擁有這些值。
Re:通過獲取列名幫助覆蓋圖謝謝 @ gzmorgan0 與nolist = {};和cnames = cnames [2 :: nitems(cnames)-2];我有我想要的選項。
很抱歉沒有這麼清楚。
我只是想弄清楚如何根據位置獲取特定列的列名(無論列類型)。
你的回答已經幫助我解決了我的問題。
再次感謝。
Re:通過獲取列名幫助覆蓋圖的論點 Y(...) 似乎沒有在運行時評估疊加圖平台。
這是在創建繪圖之前強制將列表變量替換為明確的列列表的一種方法:
dt = Open("$SAMPLE_DATA/Big Class.jmp");
list = dt << get column names(numeric, continuous);
op = Expr(
Overlay Plot(Y((Expr(list))), X(:name), Connect Thru Missing(1))
);
Eval(Eval Expr(op));Re:通過獲取列名幫助覆蓋圖僅供參考,這也有效:
myOP = dt << Overlay Plot(Y(dt << get column names(numeric, continuous)), X(:name), Connect Thru Missing(1));