5

我正在尝试使用 MATLAB 中的 quiver 函数绘制 x 和 y 速度。

我有尺寸为 100x100 的 x、y、u 和 v 数组(具有它们通常的含义)
所以,结果是我的箭袋图很密集,除非我放大,否则我看不到箭头。
有点像这样:箭袋不画箭头只是很多蓝色,matlab

看看我的情节: 我的箭袋情节

有什么方法可以使颤动图不那么密集(并且箭头更大)?我打算将 x 轴范围裁剪为 0-4。但除此之外还有什么?

出于准确性的考虑,我不能让我的网格不那么密集。但是,如果需要使情节看起来更好,我愿意忽略一些精细的数据点。

4

2 回答 2

8

例如,您可以通过绘图来绘制数量减少的箭头(假设您的数据在数组中)

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))

本例中的 2 表示我们只绘制了四分之一的箭头。您当然可以更改它,只要更改所有 2 以使数组的大小都合适。

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

希望能有所帮助,并把一切安排得很好。

于 2013-10-30T22:21:21.040 回答
1

您需要使您的区间值更大一点,以使您的矩阵更稀疏。

这是非常密集的:

1:0.0001:100

这是非常稀疏的:

1:1:100

编辑:

如果您有图像处理工具包,您可以使用imresize函数来降低矩阵分辨率:

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)
于 2013-10-30T06:16:38.813 回答