Reputation: 5039
I have a 2 Dimensional input data; a set of vector with 2 components, let's say 200. And for each one of those I have a scalar value given to them.
So it's basically something like this:
{ [input1(i) input2(i)] , output(i) } where i goes from 1 to 200
I would like to make a 3 Dimensional plot with this data, but I don't know how exactly.
I have tried with surf
. I have done a meshgrid
with the input value, but I don't know how to obtain a matrix out of the output data in order to do a surf
.
How can I get a 3 Dimensional plot with this data?
Upvotes: 2
Views: 2299
Reputation: 11917
Assuming your input data is 'randomly' spaced:
>> inputs = randn(400, 2);
>> outputs = inputs(:, 1) .* inputs(:, 2); % some function for the output
You could simply plot a scatter3 plot of these data:
>> scatter3(inputs(:, 1), inputs(:, 2), outputs)
But a better way is to interpolate, using TriScatteredInterp so you can plot the underlying function as a surface:
% create suitably spaced mesh...
gridsteps_x = min(inputs(:, 1)):0.5:max(inputs(:, 1));
gridsteps_y = min(inputs(:, 2)):0.5:max(inputs(:, 2));
[X, Y] = meshgrid(gridsteps_x, gridsteps_y);
% Compute function to perform interpolation:
F = TriScatteredInterp(inputs(:, 1), inputs(:, 2), outputs);
% Calculate Z values using function F:
Z = F(X, Y);
% Now plot this, with original data:
mesh(X, Y, Z);
hold on
scatter3(inputs(:, 1), inputs(:, 2), outputs);
hold off
Upvotes: 5