疊加圖<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
我在堆疊列時遇到了問題。 我查看的數據可以進入數百列數據。 我經常將列堆疊在一起,以便可以在該列上使用分佈圖。 但有時我的數據表會包含數百萬行數據,並且當我堆疊列時它開始崩潰。 我想知道是否有一種方法可以疊加一堆分佈圖來製作一個圖,而不必將所有列堆疊在一起? L喜歡繪製大量列並將所有這些圖表疊加到一個圖表中嗎?
感謝您的任何幫助!
回覆:疊加圖在機器的硬體限制範圍內,JMP 通常擅長這種事情。 我假設(由於某種原因)不可能將資料匯入到單一列中。
您可以使用下面的程式碼進行實驗。 在我的機器上,這需要八秒鐘,但其中一半以上的時間都花在建立起始表格並評估其中的公式上。 設定 nr = 1,000,0000 給出的運行時間約為一分鐘。
NamesDefaultToHere(1);
// Number of columns and rows
nc = 130;
nr = 100000;
// Make a test table, dt1, to work with
dt1 = NewTable("Test", NewColumn("Column 1", Numeric, Continuous, Formula(RandomNormal())),AddRows(nr));
For(i=2, i<=nc, i++, dt1 << NewColumn("Column "||Char(i), Numeric, Continuous, Formula(RandomNormal())));
// Get the data from the table into a matrix
m = dt1 << getAsMatrix;
// Close dt1 to recover some memory
Close(dt1, NoSave);
// Reshape into a column vector
m = Shape(m, NRow(m)*NCol(m), 1);
// Make a new table
dt2 = NewTable("Test in a Single Column", NewColumn("All", Numeric, Continuous, Values(m)));
// Recover memory
m = [];
回覆:疊加圖感謝您的所有建議!
不幸的是,這並不是我真正想要的。 看來JMP就是做不到我想要的。 因為我不想將所有列堆疊在一起,但我想要所有資料的分佈圖。
DropAllOtherColumns 是一個我不知道的有用函數。 我將不得不嘗試一下,看看堆疊我的列並添加該函數是否可以提高效率。
另外,Peter,我不關心查看什麼值對應於分佈中的哪個級別,這就是為什麼我想要相當於堆疊的東西,但沒有記憶體消耗方面。 但該分佈圖看起來很像我想要的,不幸的是我沒有 JMP 版本 12。 我還有 130 個變數。哈哈
謝謝你!
回覆:疊加圖我認為這種覆蓋在分發平台中是不可能的。 根據我的經驗,堆疊速度相當快。 下面的範例程式碼在我的筆記型電腦上運行只需幾秒鐘。 如果將資料數量增加到 10^8,速度會變慢,但瓶頸是分發平台,而不是堆疊。
另一個注意事項;數百萬資料的直方圖看起來與資料的較小隨機子集沒有太大差異。 因此,如果效能是一個問題,您可以嘗試在視覺化之前縮小資料集的大小(或者您可能只是需要更多 RAM)。
dt = New Table("big");
nr = 100000;
nc = 100;
dt << add rows(nr);
For(i = 1, i <= nc, i++,
dt << New Column("col" || Char(i), set each value(Random Normal()))
);
dt_stacked = dt << Stack(
columns(dt << get column names),
Source Label Column("Label"),
Stacked Data Column("Data"),
Drop All Other Columns(1)
);
dt_stacked << Distribution(Continuous Distribution(Column(:Data), Outlier Box Plot(0)));
回覆:疊加圖我聽說過的關於 JMP 的經驗法則是可用記憶體是資料集大小的兩倍。那也許需要更多內存?
回覆:疊加圖這應該會堆疊您的數據而不會重複太多。它刪除標籤列,因為您不關心值來自哪個原始列。刪除所有其他列可能是您正在尋找的部分。
newdt = Data Table( "Big Class" ) << Stack(
columns( :height, :weight, :age ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Drop All Other Columns( 1 ),
Output Table( "hw" )
);
newdt << deletecolumns( "label" );
newdt << Distribution( Continuous Distribution( Column( :Data ) ) );

回覆:疊加圖sophiaw:在 JMP 版本 12 中,您可以建立以下視覺化效果(BigClass)按性別劃分的身高(疊加)。

我想這就是你所追求的視覺化? 但不幸的是,您必須堆疊 Overlay 變量,並且您說從資料表管理的角度來看這是有問題的。 你有多少內存? 也許添加更多記憶體可以幫助解決崩潰問題? 除此之外,按照您建議的盡可能多的覆蓋變量級別,我只是想知道您的圖表在視覺上的美觀程度如何? 更不用說能夠真正分辨出哪個等級是哪個等級了。 直方圖疊加視覺化實際上是最有效的,只需相對少量的疊加變數層級。
回覆:疊加圖這很有幫助,但並不完全是我想要的。 我希望它本質上看起來與分佈圖(您選擇一列並繪製它的圖表)完全相同,只是我希望能夠選擇多個列並建立分佈。 我只想要一張圖表,底部有值,y 軸上有多少數據。 現在,我必須將想要繪製圖表的所有列堆疊在一起,然後繪製新列(這正是我想要的)。 唯一的問題是我想要將大約130 列繪製在一起,而將它們堆疊起來是不合理的,特別是當我的數據表通常有數百行或數千行時,將兩列堆疊在一起會重複行數;堆疊 130 會使 JMP 崩潰或花費大量時間。 圖形產生器基本上什麼也沒告訴我,因為在這種情況下沒有 x 軸,所以我不知道每個條代表多少或任何東西。
有沒有一種方法可以覆蓋分佈圖以製作所有列的一個圖,而不是分離出每一列?
謝謝!
回覆:疊加圖看看圖形產生器是否會做你想要的。選擇所有列並將它們放在 Y 軸上。您會看到點雲。這是使用年齡、身高、體重的大類:

然後右鍵->新增->直方圖:

然後右鍵->點->刪除,點選完成

點擊標題並按刪除(或添加更好的標題)

然後你可以使用紅色三角形來複製腳本:
Graph Builder(
Size( 534, 418 ),
Show Control Panel( 0 ),
Variables( Y( :age ), Y( :height, Position( 1 ) ), Y( :weight, Position( 1 ) ) ),
Elements( Histogram( Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Students" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Wrap( 2 )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "" )} ),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg(
Hist Seg( "Histogram (age)" ),
Histogram Color( -4222943 )
), DispatchSeg(
Hist Seg( "Histogram (height)" ),
Histogram Color( -13977687 )
), DispatchSeg(
Hist Seg( "Histogram (weight)" ),
Histogram Color( -3780931 )
)}
)
)
)