24 views (last 30 days)

Show older comments

Hello everyone,

I have data in the form of x,y, z that I want to plot as a surface plot. For x I have time points, eg. x = [0 2 5 7 9 11 15] and for 4 different conditions measurements were taken at y = [200 400 900 2100]. To each time point z corresponds to each of the 4 conditions so the matrix I have in excel looks a bit like this:

x y z

200 0 1626,8467

400 0 1259,2767

900 0 1019,4433

2100 0 741,7067

200 0,2857 1616,9833

400 0,2857 1230,79

900 0,2857 1018,78

2100 0,2857 792,2667

200 0,7143 1403,5167

400 0,7143 932,41

900 0,7143 624,98

2100 0,7143 427,3167

I want the plot to kinda look like this plot from SigmaPlot. I've been using this program for plotting. But since I want to change the colormap to a perceptually uniform colormap that is not availabe in my version, I'm trying to move to Matlab.

I've tried a few different methods to plot this as surface in matlab but yet did not get a nice result. I've been mostly orientating myself on this document:

%EXAMPLE.M

%Example of 3-D plot in Matlab

%Experimental data isn't always spaced perfectly, so neither is

%the data for this example

%Here's the x data

x=[0 1.1 2 3.2 4 5 6 7 8 9

.1 1 2.2 3 4 5 6 7 8 9

0 1 2.1 3 4 5 6 7 8 9

0 1 2 3.1 4 5 6 7 8 9

.1 1 2.1 3 4.1 5 6 7 8 9

0 1.1 2 3.2 4 5 6 7 8 9

.1 1 2.2 3 4 5 6 7 8 9

0 1 2.1 3 4 5 6 7 8 9

0 1 2 3.1 4 5 6 7 8 9

.1 1 2.1 3 4.1 5 6 7 8 9];

%Here's the y data

%a

y=[0 1.1 2 3.2 4 5 6 7 8 9

.1 1 2.2 3 4 5 6 7 8 9

0 1 2.1 3 4 5 6 7 8 9

0 1 2 3.1 4 5 6 7 8 9

.1 1 2.1 3 4.1 5 6 7 8 9

0 1.1 2 3.2 4 5 6 7 8 9

.1 1 2.2 3 4 5 6 7 8 9

0 1 2.1 3 4 5 6 7 8 9

0 1 2 3.1 4 5 6 7 8 9

.1 1 2.1 3 4.1 5 6 7 8 9]';

%Here's the z data

z=[0 0 0 0 0 0 0 0 0 0

0 0 1 1 1 1 1 1 0 0

0 1 1 2 2 2 2 1 1 0

0 1 2 2 3 3 2 2 1 0

0 1 2 3 4 4 3 2 1 0

0 1 2 3 4 4 3 2 1 0

0 1 2 2 3 3 2 2 1 0

0 1 1 2 2 2 2 1 1 0

0 0 1 1 1 1 1 1 0 0

0 0 0 0 0 0 0 0 0 0];

%There are several ways to do 3-D plots, here are a few

%plot3(x,y,z)

%mesh(x,y,z)

surf(x,y,z)

%Note: Matlab is case sensitive, so X and x aren't the same thing.

%mesh(x,y,z)

%end EXAMPLE.M

1)

with surf (x,y,z) I can plot a surface I want, but as far as I understand, surf only takes matrices of equal dimensions on x and y ?

So I only get as far as 4x4 since my x only has 4 values, that keep on repeating. Also the surface is plotted in the wrong plane.

2) trying to take in more data points I transformed my x, y and z data to 10x10 matrices. I did this manually in the workspace, as I haven't found the proper code for transformation yet. Again plotting with surf (x,y,z)

Now this looks closer to what I want, but I guess due to the matrix dimensions, the point connections and planes are wrong.

Can anyone offer me a solution for my data organisation?

Hrishikesh Borate
on 3 Feb 2021

Hi,

I understand that you are trying to plot data with unequal x and y axes. You can use meshgrid to organize the data. For other plotting options refer to surface and mesh plots.

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!