# 3D Plot in Matlab

• MATLAB
• qspeechc
In summary, you want to generate a scatter plot where each point is connected to its corresponding z point. You can do this in MATLAB by using the 'quiver' command.

#### qspeechc

Hi everyone.

So, I have a quantity I am computing, say w, a vector. Now w is a function of time t and space x. I have the vectors x and t. At each time step in a loop, I calculate w for that time step. How do I plot w as a 3D plot, as a function of time t and space x, so I can see the evolution of the system?

Here's what I tried. I created a matrix A of dimension NxM, where N is the length of the vector x, and M the length of the vector t. At the mth time step I placed the computed value of w in the mth column of A. Then I tried to plot it like this:

>> plot3(t,x,A)

but that doesn't work, instead I tried t.*x, x.*t in all combinations, but nothing worked. What is the correct way to do it?
Thanks.

I think you want surf() or contour()... plot3 is for plotting (x, y, z) points in 3-space, not for showing z(x, y).

-Kerry

I think it would help to picture how you'd like to represent this information first, and then try to figure out how to do it in Matlab.

One possibility would be to plot 3-D arrows, one at each (t;x,y,z), such that the length of the arrow was proportional to the magnitude of w (you'll have to choose a scale that looks good), and the direction is given by the direction of w. You could do this by adding the vector w, multiplied by a suitable scaling factor, to each (x,y,z) vector, to get the location of the "head" of the arrow. If you then plot a line from (x,y,z) to this new point, that will represent the vector w. I think you can even put an arrowhead on it, but I don't recall how to do that from the command line or a script.

This would give you something like those plots that show fluid flow by displaying an array of arrows that indicate the velocity of the fluid at each point on a grid.

I am actually supposed to be showing the interaction of a bunch of waves. I tried mesh and it gives an ok result if I pick a good viewing angle, I can see the direction of the waves, but not really their shapes. I guess it'll do. Thanks.

If you want to do an animation of your motion, here's a suggestion. In the following script I am plotting from a 3-D array 'U'. The third dimension corresponds to time. Surf plots a surface. Xi and Yi are meshes produced using meshgrid(x,y). I fix my axes and loop over time.

h1=surf(Xi,Yi,U(:,:,1),'erasemode','normal');

%colormap(gray);
colorbar;
axis([0 3 0 3 -1 1]);
caxis([-.25 .25]);

for ii = 2:M
set(h1,'zdata',U(:,:,ii));
refreshdata;
drawnow;
% pause(0.01);
% pause(0.3);
end

belliott4488 said:
I think it would help to picture how you'd like to represent this information first, and then try to figure out how to do it in Matlab.

One possibility would be to plot 3-D arrows, one at each (t;x,y,z), such that the length of the arrow was proportional to the magnitude of w (you'll have to choose a scale that looks good), and the direction is given by the direction of w. You could do this by adding the vector w, multiplied by a suitable scaling factor, to each (x,y,z) vector, to get the location of the "head" of the arrow. If you then plot a line from (x,y,z) to this new point, that will represent the vector w. I think you can even put an arrowhead on it, but I don't recall how to do that from the command line or a script.

This would give you something like those plots that show fluid flow by displaying an array of arrows that indicate the velocity of the fluid at each point on a grid.

You can also do this with the 'quiver' plot command. I have never have success using it, but I have seen other people have success so I can only assume it's possible. Hit up the ol' help quiver and see what you can come up with.

Hello:

I would like to generate a similar 3D graph in MATLAB. The points are (x,y,z). I would like to have a SCATTER plot on the (x,y) axes. But then each one of these (x,y) points are LINE connected to their respective z point. If anyone has code for this, or know how to do this in SAS, it would be so helpful. Thx!

## 1. How do I create a 3D plot in Matlab?

To create a 3D plot in Matlab, you can use the plot3 function. This function takes in three vectors representing the x, y, and z coordinates of the data points and plots them in a 3D space.

## 2. Can I customize the appearance of my 3D plot in Matlab?

Yes, you can customize the appearance of your 3D plot in Matlab by using various functions such as title, xlabel, ylabel, zlabel to add labels and view to change the viewpoint. You can also use colormap and colorbar to change the color scheme of your plot.

## 3. How can I add a legend to my 3D plot in Matlab?

To add a legend to your 3D plot in Matlab, you can use the legend function. This function takes in a cell array of strings representing the labels for each data series, and automatically adds a legend to your plot.

## 4. Is it possible to save my 3D plot in Matlab as an image?

Yes, you can save your 3D plot in Matlab as an image by using the saveas function. This function takes in the figure handle and a file name, and saves the plot as an image in the specified format (such as PNG, JPEG, or EPS).

## 5. Can I create an animated 3D plot in Matlab?

Yes, you can create an animated 3D plot in Matlab by using the plot3 function inside a loop and updating the data points with each iteration. You can then use the pause function to control the speed of the animation and the view function to change the viewpoint.