3D ダイアグラムのプロットこんにちは、
3D 図をプロットしようとしていますが、失敗します。 Excelには次のようなデータがあります。
| | Y | 4,15815757 | 10,5410784 |
| バツ | | Z1 | Z2 |
| 0,00038225 | | 0,04740562 | 0,09242527 |
| 0,00032384 | | 0,13448339 | 0,34250103 |
しかし、行と列がたくさんあります。 これはほんの一例です。 助けていただければ幸いです。
ありがとう。
Re: 3D ダイアグラムをプロットする「Daten.xlsx」には 23 個の Y 値、444 個の X 値、およびそれぞれの Z 値があります (合計 10212 個の値)。 したがって、「dtFinal」は次のようにすべきではありません。
dtFinal = New Table( "Converted", New Column( "X" ), New Column( "Y" ), New Column( "Z" ) );
dtFinal << add rows( N Rows( Xmat ) * N Rows( Ymat ) );
rowcnt = 0;
For( Xcnt = 1, Xcnt <= N Rows( Xmat ), Xcnt++,
For( Ycnt = 1, Ycnt <= N Rows( Ymat ), Ycnt++,
rowcnt++;
dtFinal:X[rowcnt] = Xmat[Xcnt];
dtFinal:Y[rowcnt] = Ymat[Ycnt];
dtFinal:Z[rowcnt] = Zmat[Xcnt, Ycnt];
)
);
何かをあげますか?

データのコンテキストや何をしようとしているのかについて何も知らなくても、より有益な視覚化が可能であると思います。
Re: 3D ダイアグラムをプロットするコードはかなりうまく機能します。 すべての行を実行するのに十分なメモリが足りないことがわかりました104,284,944 、それが実行されなかった理由です。
JMP12を使用しています。
どうもありがとうございます。
Re: 3D ダイアグラムをプロットするExcel ファイルをダウンロードして保存しました。次に、JSL スクリプトで新しいファイルを指定しました。コード内の行も変更する必要がありました
Worksheets( "example" ),
に
Worksheets( "JMP" ),
ワークブック内のスプレッドシートの名前を変更したためです。
JSL が最後まで実行された場合に生成される 104,284,944 行全体までプログラムを実行しませんでしたが、コードが機能することを証明するために、より少ない数まで実行しました。
上記の変更が問題ではない場合、次の質問は、使用している JMP のバージョンです。
Re: 3D ダイアグラムをプロットする大変お世話になり、本当に感謝しております。
しかし、スクリプトを実行すると、行数 (0) が無効であるため、列 X の値を決定できないというエラーが 70 行目に表示されます。
現在制作中のExcelデータを添付させていただきます。 覗いてみませんか? 私は JSL の初心者なので、あまり経験がありません。
ありがとう。
Re: 3D ダイアグラムをプロットする私の最初の提案は、Add Rows() をループの上位に移動することです。Add Rows() は非常に遅い関数なので、データ テーブルに必要なすべての行を最初の New Table() の直後に追加できれば、プログラムははるかに高速になります。これは、N Rows() を使用する代わりに、作業中の行を追跡するために全体的な行カウンターを追加する必要があることも意味します。
Names Default To Here( 1 );
// Read in Excel file
dt = Open(
"c:\users\txjim\documents\read in issue\example.xlsx"
/*"<YOUR path="" to="" the="" excel="" file="">\example.xlsx"*/,
Worksheets( "example" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
,
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
// Get Y Matrix
Ymat = {};
For( i = 3, i <= N Col( dt ), i++,
If( Column( i )[1] != "",
Ymat = Ymat |/ Matrix( Num( Column( i )[1] ) )
)
);
// Get rid of unrequired cells, and get the X and Z matrices
dt << select rows( [1, 2, 3] );
dt << delete rows;
dt << delete column( 2 );
// Convert all columns to numerics
For( i = 1, i <= N Col( dt ), i++,
Column( dt, i ) << data type( numeric )
);
// Get X matrix
Xmat = Column( dt, 1 ) << get as matrix;
dt << delete column( 1 );
// Get Z matrix
Zmat = dt << get as matrix;
// Create new data table, and output the data
dtFinal = New Table( "Converted", New Column( "X" ), New Column( "Y" ), New Column( "Z" ) );
dtFinal << add rows( N Rows( Xmat ) * N Rows( Ymat ) * N Rows( Zmat ) * N Cols( Zmat ) );
rowcnt = 0;
For( Xcnt = 1, Xcnt <= N Rows( Xmat ), Xcnt++,
For( Ycnt = 1, Ycnt <= N Rows( Ymat ), Ycnt++,
For( Zrowcnt = 1, Zrowcnt <= N Rows( Zmat ), Zrowcnt++,
For( Zcolcnt = 1, Zcolcnt <= N Cols( Zmat ), Zcolcnt++,
rowcnt++;
dtFinal:X[rowcnt] = Xmat[Xcnt];
dtFinal:Y[rowcnt] = Ymat[Ycnt];
dtFinal:Z[rowcnt] = Zmat[Zrowcnt, Zcolcnt];
)
)
)
);
dtFinal << Scatterplot 3D(
Y( :X, :Y, :Z ),
Frame3D(
Set Grab Handles( 0 ),
Set Walls( 1 ),
Set Rotation( -54, 0, 38 ),
Set Text Scale( 2 ),
Set Line Scale( 1 ),
Set Marker Transparency( 1 ),
Set Marker Quality( 0.25 ),
Set Marker Scale( 1 ),
Set View Perspective( 0.1 ),
Set View Zoom( 1 )
)
);</YOUR>Re: 3D ダイアグラムをプロットするあと1つだけ質問があります。 大きなデータを扱っており、実行に数時間かかる場合とそうでない場合があるため、このコードの実行を高速化する方法はありますか。
私のノートブックは Asus、Windows 7、64 ビット、4GB (RAM)、197GB メモリです。
ということは、私のコンピュータに問題があるとは思えませんよね?
ありがとう。
Re: 3D ダイアグラムをプロットするどうもありがとうございます。 それはまさに私がやりたかったことであり、完璧に機能します。
Re: 3D ダイアグラムをプロットするあなたの説明に基づいてサンプル Excel ファイルを作成し、このエントリに添付しました。次に、それを読み込み、データの 3D プロットを作成するために次の JSL を開発しました。これがあなたが望むものであることを願っています

Names Default To Here( 1 );
// Read in Excel file
dt = Open(
"<YOUR path="" to="" the="" excel="" file="">\example.xlsx",
Worksheets( "example" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
// Get Y Matrix
Ymat = {};
For( i = 3, i <= N Col( dt ), i++,
If( Column( i )[1] != "",
Ymat = Ymat |/ Matrix( Num( Column( i )[1] ) )
)
);
// Get rid of unrequired cells, and get the X and Z matrices
dt << select rows( [1, 2, 3] );
dt << delete rows;
dt << delete column( 2 );
// Convert all columns to numerics
For( i = 1, i <= N Col( dt ), i++,
Column( dt, i ) << data type( numeric )
);
// Get X matrix
Xmat = Column( dt, 1 ) << get as matrix;
dt << delete column( 1 );
// Get Z matrix
Zmat = dt << get as matrix;
// Create new data table, and output the data
dtFinal = New Table( "Converted", New Column( "X" ), New Column( "Y" ), New Column( "Z" ) );
For( Xcnt = 1, Xcnt <= N Rows( Xmat ), Xcnt++,
For( Ycnt = 1, Ycnt <= N Rows( Ymat ), Ycnt++,
For( Zrowcnt = 1, Zrowcnt <= N Rows( Zmat ), Zrowcnt++,
For( Zcolcnt = 1, Zcolcnt <= N Cols( Zmat ), Zcolcnt++,
dtFinal << Add Rows( 1 );
dtFinal:X[N Rows( dtFinal )] = Xmat[Xcnt];
dtFinal:Y[N Rows( dtFinal )] = Ymat[Ycnt];
dtFinal:Z[N Rows( dtFinal )] = Zmat[Zrowcnt, Zcolcnt];
)
)
)
);
dtFinal << Scatterplot 3D(
Y( :X, :Y, :Z ),
Frame3D(
Set Grab Handles( 0 ),
Set Walls( 1 ),
Set Rotation( -54, 0, 38 ),
Set Text Scale( 2 ),
Set Line Scale( 1 ),
Set Marker Transparency( 1 ),
Set Marker Quality( 0.25 ),
Set Marker Scale( 1 ),
Set View Perspective( 0.1 ),
Set View Zoom( 1 )
)
);</YOUR>
添付された Excel ファイルを保存する場所を指すように、必ず JSL 内のパスを変更してください。
Re: 3D ダイアグラムをプロットするご返信いただきありがとうございます。 私のデータが Excel でどのように表示されるかを示します。
| | Y | 4,15815757 | 10,5410784 | 14,6453847 | 19,762652 | 29,5884633 | 40,1035851 | 52,7727379 | 64,5664014 | 71,6339866 | 80,1791963 | 92,5639742 | 108,325272 | 114,711013 | 121,815695 | 142,186092 | 160,139901 | 175,938007 | 189,208612 | 200,409857 | 209,675249 | 221,03791 | 241,182479 | 256,870356 |
| バツ | | Z1 | Z2 | Z3 | Z4 | Z5 | Z6 | Z7 | Z8 | Z9 | Z10 | Z11 | Z12 | Z13 | Z14 | Z15 | Z16 | Z17 | Z18 | Z19 | Z20 | Z21 | Z22 | Z23 |
| 0 | | | | | | | | | | | | | | | | | | | | | | | | |
| -3,8225E-05 | | 0,04740562 | 0,09242527 | 0,23259929 | 1,38211141 | 2,04180178 | 3,06816231 | 0,27673071 | 0,08808252 | 0,85756483 | 0,11511972 | 0,39746555 | 0,22290737 | 0,06869082 | 0,48405979 | 1,49275933 | 0,64964997 | 0,85255862 | 2,7009082 | 0,92420938 | 0,07121721 | 20,393539 | 12,7535737 | 2,59458619 |
| 0,00032384 | | 0,13448339 | 0,34250103 | 0,37990033 | 0,38410363 | 1,70627509 | 0,89349347 | 0,42177943 | 0,20623338 | 1,51917679 | 0,26283727 | 0,68063752 | 0,75284843 | 0,10052593 | 0,3008461 | 0,98138204 | 1,02336837 | 0,31897393 | 1,47302568 | 0,78544606 | 0,1680408 | 0,3350895 | 1,47171341 | 7,46166212 |
以下に、データが X、Y、Z 形式でどのように表示されるかを示しますが、Y からのポイントは 23 個で、行数は数百行あります。
| y | y1 | y2 | y3 | y4 |
| ×1 | z11 | z21 | z31 | z41 |
| ×2 | z12 | z22 | z32 | z42 |
座標を 1 つの 3D プロットに表示したいと考えています。
それが問題です。表示されたテーブル XYZ に表示するには、この行列を展開する必要があるからです。 例えば:
| ×1 | y1 | z11 |
| ×1 | y1 | z12 |
| ×1 | y1 | z13 |
| | | |
| ×1 | y2 | z21 |
| ×1 | y2 | z22 |
| ×1 | y2 | z23 |
等々.. しかし、JMP でこれを行う方法とそれをプロットする方法がわかりません。 Origin を使用してこれを自動的に行う方法があることは知っていますが、JMP を使用する必要があります。 私の言っている意味が理解できましたか?
ありがとう。
Re: 3D ダイアグラムをプロットするデータについてさらに説明する必要があります。
すべてのデータが 1 つのプロットに表示されることを期待していますか、それとも各 Z 列、Z2、Z2 などは作成される個別のプロットを示していますか?
3D プロットに表示される各点は 3 次元によって定義されるため、表が次の形式の場合に表示される表の値がどのように表示されるかを示してください。
Re: 3D ダイアグラムをプロットする一般に、JMP プラットフォームは、各変数 (この場合は「x」、「y」、および「z」) の値が独自の列にあることを期待します。 したがって、データの場合は次のようになると思います。

次に、たとえば「Graphs >」を試してみます。 3D 散布図'。
JMP を使用して、手動またはスクリプトを使用してデータをこの形状に再配置することもできます。 ただし、詳細は Excel から正確に読み取る方法によって異なります。