绘制 3D 图你好,
我正在尝试绘制 3D 图但未成功。 我在Excel中有这样的数据:
| | 是 | 4,15815757 | 10,5410784 |
| X | | Z1 | Z2 |
| 0,00038225 | | 0,04740562 | 0,09242527 |
| 0,00032384 | | 0,13448339 | 0,34250103 |
但我有很多行和列。 这只是一个例子。 我将不胜感激任何帮助。
谢谢。
回复:绘制 3D 图“Datan.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];
)
);
给予类似的东西?

在不了解数据上下文和您正在尝试的内容的情况下,我认为可以提供更多信息的可视化。
回复:绘制 3D 图该代码运行得很好。 我发现我没有足够的内存来运行所有行104,284,944 ,这就是它没有运行的原因。
我正在使用 JMP 12。
非常感谢。
回复:绘制 3D 图我下载了你的 Excel 文件并保存了它。然后我将 JSL 脚本指向新文件。我还必须更改代码中的行
Worksheets( "example" ),
到
Worksheets( "JMP" ),
因为您更改了工作簿中电子表格的名称。
我没有将程序运行到 JSL 在运行完成时将生成的完整 104,284,944 行,但我确实将其运行到较少的行数,以向自己证明代码可以工作。
如果上述更改不是问题,那么我的下一个问题是,您使用的是哪个版本的 JMP?
回复:绘制 3D 图非常感谢您的帮助,我真的很感激。
但是,当我运行该脚本时,它在第 70 行显示错误,指出无法确定 X 列中的值,因为行数 (0) 无效。
我附上了我正在处理的 Excel 数据。 您介意看一下吗? 我是 JSL 的新用户,所以我没有太多经验。
谢谢。
回复:绘制 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>回复:绘制 3D 图我还有一个问题。 有没有办法让这段代码运行得更快,因为我正在处理大数据,需要几个小时才能运行,有时却不会。
我的笔记本电脑是华硕、Windows 7、64 位、4GB (RAM) 和 197GB 内存。
所以我不认为问题出在我的电脑上,对吗?
谢谢。
回复:绘制 3D 图非常感谢。 这正是我想做的,而且效果非常好。
回复:绘制 3D 图我根据您的描述创建了一个示例 Excel 文件,并将其附加到此条目中。然后,我开发了以下 JSL 来读取它,并创建数据的 3D 绘图。我希望这是你想要的

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>
请务必将 JSL 中的路径更改为指向保存附加 Excel 文件的位置
回复:绘制 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 |
| X | | 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 |
| 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 执行此操作。 你能明白我的意思吗?
谢谢。
回复:绘制 3D 图需要对您的数据进行更多解释。
您是否期望所有数据都显示在一个图中,或者每个 Z 列、Z2、Z2 等表示要制作一个单独的图?
由于 3D 绘图中的每个显示点都是由 3 个维度定义的,您能否说明一下,如果表格采用以下形式,则显示表格中的值将如何显示:
回复:绘制 3D 图通常,JMP 平台希望每个变量(在本例中为“x”、“y”和“z”)的值位于其自己的列中。 因此,对于您的数据,我认为这将是:

然后你可以尝试,例如“图表> 3D 散点图'。
您还可以使用 JMP 手动或使用脚本将数据重新排列成这种形状。 但详细信息具体取决于您如何从 Excel 中读取它。