Cho
Cho

Reputation: 163

matlab 4D interpolation plot

Here is a sample dataset.

x = linspace(10,20,50);
y = linspace(10,20,50);
z = cos(linspace(0,2*pi,50));
time = linspace(1,60,50);
sci_temp = randi(100,50,1);

x,y,z is position, and sci_temp is temperature data.

I wonder how to draw trajectory over xyz position with sci_temp data.

I try interpolate data, so I get 2D interpolate time vs z with sci_temp plot.

S = TriScatteredInterp(time',z',sci_temp);
[t_mesh z_mesh] = meshgrid(time,z);
tz_mesh = S(t_mesh, z_mesh);
pcolor(t_mesh,z_mesh,tz_mesh)

result

What I want to get is a 2D (time vs sci_temp) section map on a xyz 3D plot. Like this image.

result

how to show trajectory over sci_temp in 3D plot?

Is there anyone can help me?

Thanks

Upvotes: 0

Views: 663

Answers (1)

Noel Segura Meraz
Noel Segura Meraz

Reputation: 2323

First, you are doing your interpolation slightly wrong, you don't want to interpolate over the mesh created by

meshgrid(time,z);

Because it will duplicate values. You want to interpolate over the mesh created by

meshgrid(time,linspace(min(z),max(z),50));

Once you get the interpolated values like: You can plot them in 3D space with the surface function, you just need to make sure to give x and y coordinates appropriately

surface(repmat(x,50,1),repmat(y,50,1),zmesh,tzmesh)

You can even have more complex paths, for example, same data but y=z


Edit: Also I forgot to mention, I'd suggest you to use scatteredInterpolant instead of TriScatteredInterp. It gives you more control over the interpolation

Upvotes: 1

Related Questions