我试图在MATLAB中使用quiver函数绘制x和y速度。
我有x,y,u和v数组(带有它们通常的含义),尺寸为100x100
因此,结果是我的颤动情节密集,除非我放大,否则我看不到箭头
有点像这样:quiver not drawing arrows just lots of blue, matlab
看看我的情节:
有没有办法让箭袋密度更低(并且箭头更大)?我打算将x轴范围剪辑到0-4。但除此之外什么呢?
出于准确性考虑,我无法使网格密度降低。但是,如果需要使绘图看起来更好,我愿意忽略一些精细的数据点。
答案 0 :(得分:7)
例如,您可以通过绘制绘制减少数量的箭头(假设您的数据在数组中)
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=2
按指定的数量缩放箭头,或者如果您希望所有箭头的长度相同,则可以标准化速度。这样做会丢失信息,因为您无法通过查看箭头来比较速度的大小,但在某些情况下它可能很有用。您可以将u
和v
除以sqrt(u.^2+v.^2)
(在您希望绘制箭头的点处。)
希望能够很好地帮助和完善一切。
答案 1 :(得分:1)
您需要使间隔值更大一些,以使矩阵更稀疏。
这非常密集:
1:0.0001:100
这非常稀疏:
1:1:100
修改强>
如果你有图像处理工具包,你可以使用imresize函数来降低矩阵分辨率:
newMat = imresize(oldMat, newSize);
如果您没有工具箱,那么您可以使用interp2
插值以与this example类似的方式调整大小:
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)