Matlab 如何减少曲面图中显示的网格线数量?
我找到了,但我不能完成我的工作。我想更精确地绘制我正在研究的函数,而不是用黑色墨水对函数进行过度着色。。。这意味着减少网格线的数量。我认为这些函数是复杂的 我试图将在上面链接中编写的工作添加到我已经存在的代码中。 这就是我所做的:Matlab 如何减少曲面图中显示的网格线数量?,matlab,plot,3d,matlab-figure,Matlab,Plot,3d,Matlab Figure,我找到了,但我不能完成我的工作。我想更精确地绘制我正在研究的函数,而不是用黑色墨水对函数进行过度着色。。。这意味着减少网格线的数量。我认为这些函数是复杂的 我试图将在上面链接中编写的工作添加到我已经存在的代码中。 这就是我所做的: 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; f
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
但问题是网格仍然是不可见的。如何解决这个问题?问题在哪里?
也许,不画网格,也许可以画圆和半径,就像最初在图上画的那样 这种方法怎么样
[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') ;
我找到了我的一本旧剧本,在那里我或多或少做了你想要的。我把它改成了你们这里的径向图 此脚本中有两个技巧:
XData
和YData
属性不是矩形网格,因此不能只取这些数组的第一行和第一列。相反,我们使用完整矩阵,但子样本行用于绘制圆,子样本列用于绘制半径不幸的是。当未命中率较高时,会出现问题。。。网格甚至不完整:/I我有一个问题,因为您的方法在使用子批的情况下不起作用…@MarineGalantin:“不起作用”是什么意思?您是否收到错误消息、错误输出。。。你能更具体地描述一下什么地方出了问题吗?我正在尝试修复错误。。。如果我找不到任何解决办法,我会回来的。你认为我在stack上再问一个问题更好吗?还是我可以在这篇文章上编辑我的问题?@MarineGalantin:如果是一个小细节,我可以把它添加到这个答案中。如果事情比这更复杂,最好问一个新问题。@MarineGalantin:我不确定我是否理解你的意思。为什么你希望这个图形是一条直线?您正在绘制
f=imag(w)
作为x=real(z),y=imag(z)
的函数。如果w=z
,则绘图的高度f等于y,即f(x,y)=y。该域是圆形的,因此有一个沿y轴倾斜、沿x轴平坦的圆盘。行设置(gca,'DataAspectRatio',[1,1,40])
设置f轴的拉伸比x轴和y轴低40倍,使磁盘看起来像是平放的。在本例中,将其更改为[1,1,1]
,以更好地查看数据。
% 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