3D 다이어그램 플롯안녕하세요,
3D 다이어그램을 그리려고 하는데 실패했습니다. Excel에 다음과 같은 데이터가 있습니다.
| | 와이 | 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 , 그래서 실행되지 않았습니다.
JMP 12를 사용하고 있습니다.
매우 감사합니다.
Re: 3D 다이어그램 플롯엑셀 파일을 다운받아 저장해 두었습니다.그런 다음 JSL 스크립트에 새 파일을 지정했습니다.또한 코드의 줄을 변경해야 했습니다.
Worksheets( "example" ),
에게
Worksheets( "JMP" ),
통합 문서 내의 스프레드시트 이름을 변경했기 때문입니다.
JSL이 실행을 완료할 경우 생성할 전체 104,284,944개 행까지 프로그램을 실행하지는 않았지만, 코드가 작동한다는 것을 스스로 증명하기 위해 더 적은 수까지 실행했습니다.
위의 변경 사항이 문제가 아닌 경우 다음 질문은 어떤 버전의 JMP를 사용하고 있습니까?
Re: 3D 다이어그램 플롯도와주셔서 정말 감사합니다. 정말 감사했습니다.
그러나 스크립트를 실행하면 70행에 행 수(0)가 유효하지 않기 때문에 X 열의 값을 확인할 수 없다는 오류가 표시됩니다.
제가 작업중인 엑셀자료를 첨부합니다. 좀 구경해 보시겠어요? 저는 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 다이어그램 플롯질문이 하나 더 있습니다. 저는 빅 데이터를 다루고 있는데 실행하는 데 몇 시간이 걸리고 때로는 그렇지 않은 경우가 있기 때문에 이 코드를 더 빠르게 실행할 수 있는 방법이 있습니까?
내 노트북은 Asus, Windowns 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에서 어떻게 보이는지 보여 드리겠습니다.
| | 와이 | 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개의 포인트가 있고 수백 개의 행이 있습니다.
| 와이 | y1 | y2 | y3 | y4 |
| x1 | z11 | z21 | z31 | z41 |
| x2 | z12 | z22 | z32 | z42 |
하나의 3D 플롯에 좌표를 표시하고 싶습니다.
그것이 문제입니다. 표시된 XYZ 테이블을 보여주기 위해서는 이 행렬을 확장해야 하기 때문입니다. 예를 들어:
| x1 | y1 | z11 |
| x1 | y1 | z12 |
| x1 | y1 | z13 |
| | | |
| x1 | y2 | z21 |
| x1 | y2 | z22 |
| x1 | y2 | z23 |
등등.. 하지만 JMP에서 어떻게 이 작업을 수행하고 그래프를 그리는지 전혀 모르겠습니다. Origin을 사용하여 이 작업을 자동으로 수행할 수 있는 방법이 있다는 것을 알고 있지만 JMP를 사용하여 수행해야 합니다. 내 말이 무슨 뜻인지 이해할 수 있겠습니까?
감사해요.
Re: 3D 다이어그램 플롯데이터에 대한 추가 설명이 필요합니다.
모든 데이터가 하나의 플롯에 표시되기를 기대하십니까? 아니면 각 Z 열, Z2,Z2 등이 별도의 플롯을 나타내나요?
3D 플롯에 표시된 각 점은 3차원으로 정의되므로 테이블이 다음 형식인 경우 표시된 테이블의 값이 어떻게 표시되는지 보여 주시겠습니까?
Re: 3D 다이어그램 플롯일반적으로 JMP 플랫폼에서는 각 변수(이 경우 'x', 'y' 및 'z')의 값이 자체 열에 있을 것으로 예상합니다. 따라서 귀하의 데이터에 대해서는 다음과 같을 것이라고 생각합니다.

그런 다음 '그래프 >'와 같이 시도해 볼 수 있습니다. 산점도 3D '.
JMP를 사용하면 직접 또는 스크립트를 사용하여 데이터를 이 모양으로 재배열할 수도 있습니다. 그러나 세부 사항은 Excel에서 정확히 어떻게 읽는지에 따라 달라집니다.