2013-10-30 37 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

如果你不想丟失很多信息,你需要做一些插值,而不是直接刪除中間點。 –