LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 
Reply

How to plot 3D surface graph from X,Y,Z points?

How to plot 3D surface graph from X,Y,Z points?

Hi all,

 

Need to plot a 3D surface from X,Y,Z 1D arrays.  This works when plotting as points but I want to form surfaces between the points. 

 

I am thoroughly confused about the formation of the 2D Z matrix required by 3D plot surface helper.  How to form the Z array (2D)?

 

Attached is a VI with typical (default) data.

 

Thanks to all.

 

Battler.

0 Kudos
Message 1 of 34
(24,639 Views)

Re: How to plot 3D surface graph from X,Y,Z points?

You must interpolate the surface prior to graphing it. I'm working on an example right now...

Wirebird Labs: Expert Toolkits for LabVIEWDeploy, by Wirebird Labs: Expert Toolkits for LabVIEW
Message 2 of 34
(24,620 Views)

Re: How to plot 3D surface graph from X,Y,Z points?

Here's a screenshot of the VI: for licensing reasons I cannot upload a working version of the code. It should be easy enough to reconstruct. The 3D polynomial fit and evaluation VI's (the ugly subVIs with black text on white) can be downloaded from this link: http://zone.ni.com/devzone/cda/epd/p/id/470

 

Also, consider searching through altenbach's posts for '3D'. He has provided excellent information on different 3D interpolation methods, and if I recall has even uploaded a library of his own interpolation functions.

 

***EDIT: Wait a little longer... thinking about this again... ***

Wirebird Labs: Expert Toolkits for LabVIEWDeploy, by Wirebird Labs: Expert Toolkits for LabVIEW
Message 3 of 34
(24,614 Views)

Re: How to plot 3D surface graph from X,Y,Z points?

OK, this is better. My first response went down a rabbit trail of unnecessary resampling... Keep in mind that once you calculate the 3D coefficients, it is possible to resample in order to interpolate or extrapolate, but it's not necessary for me to include in this simple example. Sorry for the schizophrenic responses:

 

19787i031DF35E1B0E46B1

Wirebird Labs: Expert Toolkits for LabVIEWDeploy, by Wirebird Labs: Expert Toolkits for LabVIEW
Message 4 of 34
(24,609 Views)

Re: How to plot 3D surface graph from X,Y,Z points?

Why not: just for kicks, here was my original example with the extra resampling bit:

 

3DInterpolation.png

Wirebird Labs: Expert Toolkits for LabVIEWDeploy, by Wirebird Labs: Expert Toolkits for LabVIEW
Message 5 of 34
(24,604 Views)

Re: How to plot 3D surface graph from X,Y,Z points?

If you have mathscript, you can use the griddata function.

 


LabVIEW Champion Do more with less code and in less time
0 Kudos
Message 6 of 34
(24,597 Views)

Re: How to plot 3D surface graph from X,Y,Z points?

Looking at your data, it is well quantized to a grid if integers with a spacing of 1 and perfectly arranged in the 1D arrays.

In this particular case, you can do as follows:

 

 

 

If the x and y ramps have noninteger increments, you need to remap a little bit. Smiley Wink


LabVIEW Champion Do more with less code and in less time
Message 7 of 34
(24,588 Views)

Re: How to plot 3D surface graph from X,Y,Z points?

Hi,

 

I tried to generate a 3D plot using the method described here, but I am running into to some problem with the plotting. You can see from my code (file "surface plot" and sample data) attached that I get an unexpected plane connecting the start and end points on the surface plot. Ideally, only the curved surface should be present. It would be great if any of you have any clue. Please let me know if you need more information. Thanks for the help in advance.

 

 

0 Kudos
Message 8 of 34
(24,002 Views)

Re: How to plot 3D surface graph from X,Y,Z points?

0 Kudos
Message 9 of 34
(24,001 Views)

Re: How to plot 3D surface graph from X,Y,Z points?


@User89 wrote:

I tried to generate a 3D plot using the method described here,



No, you are not! Your X axis values are a sawtooth instead of a linear ramp. There are two ways to graph a 3D surface. In your case, your z data is a 2D array, thus your x and y arrays need to correspond to the linear ramps in the x and y direction. Disconnect the x and y vector temporarily to see the real 2D data.

 

(You also have horrible race conditions, for example in "Table Gen.vi" you are writing to and reading from a global variable and there is no telling what happens first, but the outcome critically depends on it.)


LabVIEW Champion Do more with less code and in less time
Message 10 of 34
(23,992 Views)