Matlab quiver绘图异常:箭头仅显示在等高线左侧问题排查
Matlab quiver箭头仅显示在等高线左侧的问题排查
我尝试在Matlab中使用quiver函数绘制箭头以表示等高线上的流场,但运行以下代码后,箭头仅绘制在等高线的左侧区域,请问可能是什么原因导致该问题?
ygrid1=ygrid(1:6:end); zgrid1=zgrid([1:1:3 4:3:54]); v1=zeros(size(ygrid1,2),size(zgrid1,2)); w1=zeros(size(ygrid1,2),size(zgrid1,2)); for j=1:1:43 for k=1:1:3 v1(j,k)=V(6*j-5,k); w1(j,k)=W(6*j-5,k); end for k=4:1:20 v1(j,k)=V(6*j-5,3*k-8); w1(j,k)=W(6*j-5,3*k-8); end end f2=figure; [c,h]=contourf(ygrid*1480,5*zgrid,50*V',30); %if lat:1480*ygrid*180/(6371*pi) %utranspose=u' colorbar set(h,'LineStyle','none') %black contours of the iso-zones cmin=min(min(50*V')); cmax=max(max(50*V')); if cmin==cmax colormap(f2,b2r(cmin-1,cmax+1)); else colormap(f2,b2r(cmin,cmax)); end %b2r: from blue to red with white set to 0 title(' Mean v (ms^{-1})'); ylabel('Height (km)'); xlabel('Distance from y0 (km)') hold on quiver(1495*ygrid1,5*zgrid1,50*v1',0.17*w1','k','autoScaleFactor',0.1) hold off
可能的原因分析:
y方向网格采样范围有限:
ygrid1 = ygrid(1:6:end)只提取了ygrid中从第一个元素开始、步长为6的采样点,相当于仅覆盖了y方向的左侧部分(假设ygrid是从左到右递增的坐标序列),而等高线绘制用的是完整的ygrid,因此箭头自然只出现在采样覆盖的左侧区域。循环索引未覆盖完整数据范围:
循环中j的范围是1:1:43,计算得到的行索引6*j-5最大为6*43-5=253,如果原始矩阵V和W的行数大于253,那么y方向右侧对应的行数据完全没有被采样,导致这部分区域无箭头数据。坐标缩放系数不一致:
等高线的x坐标用ygrid*1480缩放,而quiver的x坐标用1495*ygrid1,两者缩放系数存在差异,可能导致箭头整体偏移,视觉上呈现“仅在左侧”的效果,建议统一缩放系数(比如都使用1480)。维度转置与网格匹配错误:
需要确认ygrid1的维度:如果ygrid1是列向量,size(ygrid1,2)结果为1,那么初始化的v1和w1第一维度为1,最终转置后仅对应一列数据,自然只在左侧显示箭头。应确保v1、w1的维度与ygrid1、zgrid1的网格维度完全匹配。
内容的提问来源于stack exchange,提问作者aurore
相关产品推荐
相关产品推荐

