2013-10-30 35 views
3

我想在MATLAB中使用颤抖函数绘制x和y速度。MATLAB颤抖 - 小箭头

我有X,Y,U和V阵列(与它们通常的含义)与尺寸100×100
所以,结果是我的颤动情节密集,我无法看到的箭头,除非我放大。
有点像这样的:quiver not drawing arrows just lots of blue, matlab

在我的剧情请看: My quiver plot

有没有什么办法,使颤抖情节密度较小(与较大箭头)?我计划将x轴范围剪切为0-4。但除此之外的任何东西?

我不能让我的网格密度不够精确。不过,如果需要让情节看起来更好,我愿意忽略一些精细的数据点。

回答

5

您可以通过绘制绘制箭头数量的减少,例如,(假设你的数据在阵列)

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按指定量缩放箭头,或者如果要使所有箭头的长度相同,则可以对速度进行规范化。这样做会使信息丢失,因为您无法通过查看箭头来比较速度的大小,但在某些情况下它可能很有用。您可以通过将和v分别用sqrt(u.^2+v.^2)(在您想绘制箭头的点上)

希望帮助和设置好所有东西。

+0

嗯...我有点做了同样的事情... 但困难的方式...通过首先存储滤波矩阵 – tumchaaditya

+0

我通常也存储滤波矩阵,所以我可以更容易地重用它们,但要展示我的意思将它们直接放入'quiver'命令更简单。 – David

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

并感谢@大卫,如果你想只是去掉了一些个人点,你可以简单地做:

xPlot=x(1:2:end) 
+0

实际上,数据来自Fortran程序,我不能在那里更改网格大小,因为这会妨碍准确性。我可以让matlab忽略一些好点吗?例如我在x和y中的当前网格是0:0.05:5。我可以让MATLAB只考虑点0:0.2:5吗? – tumchaaditya

+0

是的。你可以创建新的变量,比如'xPlot = x(1:2:end)',它只会使用'x'和'y'来绘制点数的1/4。 – David

+1

如果你不想丢失很多信息,你需要做一些插值,而不是直接删除中间点。 –