You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 02:01:14