- Interpolate your 2D scattered data (xi,yi,pi) onto a 2D grid to create a smooth “height field” (surface).
- Plot that surface in 3D using "surf", "mesh".
- Overlay small spheres at the original data points to visualize exact measurement locations/values.
Plotting a circular surface with certain values
    7 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Hello everybody, here goes my question. I've spent a lot of time at my work trying to plot a circular surface where I charge certain parameter at certain points of this circle. The thing is that I would like to get a nice plot, something like figure 1. I only have the coordinates in the plane X,Y the smaller spheres would represent the parameters I get from a certain measurement.
Thank you very much, so far, honestly, I'm quite tired of trying to plots such  a surface by my own, charging values to each cell.
0 Commenti
Risposte (1)
  Karan Singh
      
 il 21 Feb 2025
        A good workflow to be followed will be 
This approach should help you build a nice 3D visualization similar in spirit to your reference figure though of course the exact “shape” depends on your interpolation and how you scale/color the spheres. I have done the process with some random data 
% --- 1) Create some sample scattered data (x, y, p) ---
%     (Replace this part with your real data)
N = 30;                     % Number of sample points
theta = 2*pi*rand(N,1);    % Random angles
r = 10*rand(N,1);          % Random radii
x = r .* cos(theta);        % X-coordinates in a circular region
y = r .* sin(theta);        % Y-coordinates in a circular region
p = x.^2 + y.^2;            % Some function of x,y (example)
% --- 2) Interpolate onto a grid ---
numGrid = 50;  % how many points in each dimension of the grid
xMin = min(x);  xMax = max(x);
yMin = min(y);  yMax = max(y);
% Create a mesh grid covering the data extent
[xq, yq] = meshgrid(linspace(xMin, xMax, numGrid), ...
                    linspace(yMin, yMax, numGrid));
% Interpolate p onto the grid
%  (methods: 'linear', 'cubic', 'natural', etc.)
zq = griddata(x, y, p, xq, yq, 'cubic');
% --- 3) Plot the interpolated surface ---
figure('Color', 'w');  % new figure, white background
surf(xq, yq, zq);
shading interp;       % smooth shading
colormap jet;         % choose a colormap
colorbar;             % show a color scale
hold on;
axis equal;           % preserve aspect ratio (so circles remain circular)
xlabel('X'); ylabel('Y'); zlabel('Parameter');
title('3D Surface + Spheres at Original Data Points');
% --- 4) Overlay small spheres at each original point ---
% Generate a unit sphere for re-use
[sphereX, sphereY, sphereZ] = sphere(12);  % 12 = resolution of the sphere
% Loop through each data point and place a small sphere
for i = 1:length(x)
    % Radius can be constant or scaled by p(i)
    % (Here we just pick a small constant radius)
    r = 0.5;  
    % Shift the unit sphere to (x_i, y_i, p_i)
    Sx = r*sphereX + x(i);
    Sy = r*sphereY + y(i);
    Sz = r*sphereZ + p(i);
    % Create the sphere surface
    hsphere = surf(Sx, Sy, Sz, ...
        'EdgeColor', 'none', ...   % no mesh lines
        'FaceColor', 'interp');    % interpolate face colors
    % Color the entire sphere by p(i) (or you can get fancy with gradients)
    cdata = p(i)*ones(size(Sx));   % each vertex has color p(i)
    set(hsphere, 'CData', cdata);
end
% Optional: adjust view angle
view(45, 30);  % rotate camera [az, el]
Karan
0 Commenti
Vedere anche
Categorie
				Scopri di più su Surface and Mesh Plots in Help Center e File Exchange
			
	Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


