MATLAB箭袋-小箭头

MATLAB箭袋-小箭头,matlab,Matlab,我正试图用MATLAB中的quiver函数绘制x和y速度图 我有尺寸为100x100的x、y、u和v阵列(具有其通常的含义) 因此,结果是我的箭图很密集,除非放大,否则我看不到箭头。 有点像这样: 看看我的情节: 有没有办法让箭袋图不那么密集(并且有更大的箭头)?我计划将x轴范围剪裁为0-4。但除此之外还有别的吗 出于精度考虑,我无法降低网格的密度。然而,如果为了使绘图看起来更好,我愿意忽略一些精细的数据点 为了使矩阵更稀疏,需要将区间值调大一点 这是非常密集的: 1:0.0001:100

我正试图用MATLAB中的quiver函数绘制x和y速度图

我有尺寸为100x100的x、y、u和v阵列(具有其通常的含义)
因此,结果是我的箭图很密集,除非放大,否则我看不到箭头。
有点像这样:

看看我的情节:

有没有办法让箭袋图不那么密集(并且有更大的箭头)?我计划将x轴范围剪裁为0-4。但除此之外还有别的吗


出于精度考虑,我无法降低网格的密度。然而,如果为了使绘图看起来更好,我愿意忽略一些精细的数据点

为了使矩阵更稀疏,需要将区间值调大一点

这是非常密集的:

1:0.0001:100
这是非常稀疏的:

1:1:100
编辑:

如果您有图像处理工具包,您可以使用该功能降低矩阵分辨率:

newMat = imresize(oldMat, newSize); 
如果没有工具箱,则可以使用与使用
interp2
插值类似的方式调整大小:

orgY = 1:size(oldMat,1); 
orgX = 1:size(oldMat,2); 
[orgX,orgY] = meshgrid(orgX ,orgY); 
newY = linspace(1,size(mat,1),newHeight); 
newX = linspace(1,size(mat,2),newWidth); 
[newX,newY] = meshgrid(newX,newY); 
newMat = interp2(orgX,orgY,mat,newX,newY);
多亏了@David,如果你想去掉一些单独的要点,你可以简单地做到:

xPlot=x(1:2:end)

例如,可以通过打印来打印减少的箭头数(假设数据为数组)

其中,本例中的2表示我们只绘制四分之一的箭头。当然,您可以更改它,只要您更改所有的2,以便阵列都具有适当的大小

如果要更改箭头的长度,有两个选项。首先,可以使用“缩放”选项
scale=2
按指定的量缩放箭头,或者如果希望所有箭头的长度相同,则可以将速度标准化。这样做确实会丢失信息,因为无法通过查看箭头来比较速度的大小,但在某些情况下可能会有用。可以通过将
u
v
都除以
sqrt(u.^2+v.^2)
(在要绘制箭头的点处)来完成此操作


希望帮助和设置一切顺利。事实上,数据来自FORTRAN程序,我不能改变它的大小,因为这会妨碍精度。我能让MATLAB忽略一些细微的点吗?例如我在XY中的当前网格是0:0.05:5。我能让MATLAB只考虑点在0:0.2:5吗?是的。你可以创建新的变量LIK。e

xPlot=x(1:2:end)
它将在点的1/4处绘制箭头,就像使用
x
y
一样。如果你不想丢失太多信息,你需要做一些插值,而不是直接删除中间点。@Samuel不,我不认为你会丢失信息,因为箭袋箭头只提供信息关于绘制的点。由于quiver仅绘制数据所在的位置,因此不需要插值。我认为跳过将比插值更好,因为它将在每个点上给出精确的值。如果我插值(实际上这与插值相反),一个点上的值将受到相邻点的影响,事实并非如此..嗯…我做了类似的事情…但困难的是…通过先存储过滤矩阵,我通常也存储过滤矩阵,这样我可以更容易地重用它们,但为了说明我的意思,将它们直接放入
quiver
指挥部。
quiver(x(1:2:end,1:2:end),y(1:2:end,1:2:end),u(1:2:end,1:2:end),v(1:2:end,1:2:end))