# Draw 3D plot from 2D plot with discrete data points

5 views (last 30 days)
autumn on 19 Jul 2021
Commented: Star Strider on 23 Jul 2021
Hi All,
I am trying to draw 3D plot from a 2D line graph (in x/z-axis).
I have discrete data points in x and z-axis like below graph. I want to roate it around z-axis. Therefore, I used 'surf' Here is what I obtained so far.
filename = 'filename.xlsx';
r = (x(4:49,12))'; z = (x(4:49,13))'; %% data from excel
for i = 1:46;
theta = linspace(0,2*pi,200); %% to rotate around z-axis
X = r(i)*cos(theta);
Y = r(i)*sin(theta);
Z = z(i)*ones(length(Y), length(X));
plot(X,Y); %% just for checking X and Y are on circles
surf(X,Y,Z); %% wanted to obtain a smooth mountain with an empty center.
if i < 46;
hold on;
i = i+1;
end;
end
xlabel('x'); ylabel('y');zlabel('z');
hold off
colorbar
and this is the result.. The profile has to be very smooth, no sharp edges on the boundary. However, it has four edges. Also, when x<450, there is be no data points in z-axis.. but it shows very flat top surface (yellow). I think I need to assign z-values at the correct x and y coordinates. However, I am not sure how to fix this.

Star Strider on 20 Jul 2021
Without the Excel file, I experimented to create an approsimately equal curve. I then used it as the radiuc argument to the cylinder fucntion to create the surf plot.
x = linspace(460, 700, 50);
z = 1E-194*exp(-0.025*x+460) + 1.5;
figure
plot(x, z) [X,Y,Z] = cylinder(z,50);
X = X .* x(:)/2;
Y = Y .* x(:)/2;
Z = Z*max(z) + min(z);
figure
surfc(X, Y, Z, 'EdgeColor','none')
colorbar
zlim([0 max(z)]) That likely approximates what appears to have been requested. Make appropriate changes so it works correctly with the actual data.
.
Star Strider on 23 Jul 2021
As always, my pleasure!
.