我找到了this answer,但是我无法完成工作。我想更精确地绘制正在研究的功能,而又不用黑色墨水给我的功能上色……这意味着减少了网格线的数量。我认为这些功能很复杂。
我试图将上面链接中编写的工作添加到我现有的代码中。 这就是我所做的:
r = (0:0.35:15)'; % create a matrix of complex inputs
theta = pi*(-2:0.04:2);
z = r*exp(1i*theta);
w = z.^2;
figure('Name','Graphique complexe','units','normalized','outerposition',[0.08 0.1 0.8 0.55]);
s = surf(real(z),imag(z),imag(w),real(w)); % visualize the complex function using surf
s.EdgeColor = 'none';
x=s.XData;
y=s.YData;
z=s.ZData;
x=x(1,:);
y=y(:,1);
% Divide the lengths by the number of lines needed
xnumlines = 10; % 10 lines
ynumlines = 10; % 10 partitions
xspacing = round(length(x)/xnumlines);
yspacing = round(length(y)/ynumlines);
hold on
for i = 1:yspacing:length(y)
Y1 = y(i)*ones(size(x)); % a constant vector
Z1 = z(i,:);
plot3(x,Y1,Z1,'-k');
end
% Plotting lines in the Y-Z plane
for i = 1:xspacing:length(x)
X2 = x(i)*ones(size(y)); % a constant vector
Z2 = z(:,i);
plot3(X2,y,Z2,'-k');
end
hold off
但是问题是网格仍然不可见。如何解决这个问题?问题出在哪里? 也许,除了绘制网格之外,还可能像在图形上一样绘制圆和半径?
答案 0 :(得分:1)
这种方法怎么样?
[X,Y,Z] = peaks(500) ;
surf(X,Y,Z) ;
shading interp ;
colorbar
hold on
miss = 10 ; % enter the number of lines you want to miss
plot3(X(1:miss:end,1:miss:end),Y(1:miss:end,1:miss:end),Z(1:miss:end,1:miss:end),'k') ;
plot3(X(1:miss:end,1:miss:end)',Y(1:miss:end,1:miss:end)',Z(1:miss:end,1:miss:end)','k') ;
答案 1 :(得分:1)
我找到了我的旧脚本,在其中我或多或少做了您想要的工作。我将其调整为您在此处的径向图。
此脚本有两个技巧:
表面图包含所有数据,但是由于没有绘制网格,因此很难看到该表面中的细节(您的数据非常平滑,对于凹凸不平的表面尤其如此,因此我在数据中添加了一些噪点以证明这一点)。为了提高可见度,我们对颜色使用插值法,并添加光源。
绘制的网格是原始数据的二次采样版本。因为原始数据是径向的,所以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