Я нашел свой старый сценарий, где я сделал более или менее то, что вы ищете.Я адаптировал его к радиальному графику, который у вас есть.
В этом сценарии есть два трюка:
Поверхностный график содержит все данные, но потому что нетНарисованная сетка, детали этой поверхности трудно увидеть (ваши данные довольно гладкие, это особенно верно для более неровной поверхности, поэтому я добавил немного шума в данные, чтобы показать это).Чтобы улучшить видимость, мы используем интерполяцию для цвета и добавляем источник света.
Нарисованная сетка является версией субдискретизированных исходных данных.Поскольку исходные данные являются радиальными, свойства XData
и YData
не являются прямоугольной сеткой, и поэтому нельзя просто взять первую строку и столбец этих массивов.Вместо этого мы используем полные матрицы, но строки выборки для рисования окружностей и столбцы выборки для рисования радиусов.
% create a matrix of complex inputs
% (similar to OP, but with more data points)
r = linspace(0,15,101).';
theta = linspace(-pi,pi,101);
z = r * exp(1i*theta);
w = z.^2;
figure, hold on
% visualize the complex function using surf
% (similar to OP, but with a little bit of noise added to Z)
s = surf(real(z),imag(z),imag(w)+5*rand(size(w)),real(w));
s.EdgeColor = 'none';
s.FaceColor = 'interp';
% get data back from figure
x = s.XData;
y = s.YData;
z = s.ZData;
% draw circles -- loop written to make sure the outer circle is drawn
for ii=size(x,1):-10:1
plot3(x(ii,:),y(ii,:),z(ii,:),'k-');
end
% draw radii
for ii=1:5:size(x,2)
plot3(x(:,ii),y(:,ii),z(:,ii),'k-');
end
% set axis properties for better 3D viewing of data
set(gca,'box','on','projection','perspective')
set(gca,'DataAspectRatio',[1,1,40])
view(-10,26)
% add lighting
h = camlight('left');
lighting gouraud
material dull