2014-04-07 13 views
7

Robię quiver plot:Matlab jak wypełnić kołczan ze strzałkami głowy

[x,y] = meshgrid(0:0.2:2,0:0.2:2); 
u = cos(x).*y; 
v = sin(x).*y; 
figure 
quiver(x,y,u,v) 

Chcę głowice strzałek być wypełniona (tj enter image description here i nie enter image description here)

Z dokumentacji, powinno być dość proste za pomocą

quiver(...,LineSpec,'filled') 

ja jednak wciąż nie mógł dowiedzieć się odpowiednią składnię - to nie działa:

quiver(x,y,u,v,'LineWidth','filled'); 
quiver(x,y,u,v,'LineWidth',1,'filled'); 

Dzięki za pomoc!


EDIT: Korzystanie Specyfikatory linia wykonuje następujące operacje:

quiver(x,y,u,v) %Original 

enter image description here

quiver(x,y,u,v,'-sk','filled') %With line specifiers 

enter image description here

+2

w [LineSpec] (http://www.mathworks.co.uk/help/matlab/ref/linespec.html) jest zwykle ciąg jak ' '-k'' na czarno i "wypełnione" odnosi się do znaczników punktów, które można określić. Na przykład '-sk'', który daje kwadraty, jednak te zastąpią strzały głowy z kołczanu. Aby zmodyfikować drążki sugeruję, żebyś spojrzał na [to poprzednie pytanie] (http://stackoverflow.com/questions/18776172/in-matlab-how-do-i-change-the-arrow-head-style-in -pół-wykres). – RTL

+0

@RTL: Dzięki za referencję do drugiego pytania jest to naprawdę pomocne, ale ja (jak sugerują to docs) powinien istnieć prostszy sposób na zrobienie tego.Jeśli chodzi o LineSpec, to jest to dobry kierunek, ale specyfikatorzy nie obejmują wszystkich standardowych specyfikacji, a zwłaszcza: "kołczan (x, y, u, v," Linestyle "," - sk ")" wydaje się nie być poprawna składnia. –

+0

try 'quiver (x, y, u, v, '- sk')' 'styl linowy' nie jest potrzebny. Obawiam się, że nie znam prostszego sposobu ... (jego porównanie z 'quiver (x, y, u, v, '- sk', 'filled')', aby zobaczyć efekt wypełnienia) – RTL

Odpowiedz

3

Nie jestem MATLAB profesjonalny, więc proszę wybaczyć, jeśli moja odpowiedź jest niezgrabny. Jestem pewien, że istnieją bardziej eleganckie sposoby rozwiązania tego problemu - oto, co znalazłem.

Postanowiłem rozwiązać ten problem, podnosząc pozycje końcówek strzałek, usuwając je i odświeżając je za pomocą fill (jak sugerował Deve). Zauważyłem, że mogę powiedzieć fill, że jeden wielokąt kończy się, a następny zaczyna się od wstawienia wartości (to także sposób, w jaki rysowane są oryginalne końcówki strzałek, jak widać podczas sprawdzania oryginalnego XData). W ten sposób straciłem możliwość wpływania na kolor obiektów i nie zostały one wypełnione. Jako obejście namalowałem nowe wskazówki strzałek w pętli - wiem, że może być lepszy sposób na zrobienie tego, więc cieszę się z każdego dodania.

Użyłem podanego przykładu, zastępując ostatnią linię przez HANDLE = quiver(x,y,u,v);, aby uzyskać uchwyt do wątku. Od tego momentu:

children=get(handle,'children'); % retrieve the plot-children - 
           % second element are the arrow tips 

XData=get(children(2),'XData'); % retrieve the coordinates of the tips 
YData=get(children(2),'YData'); 

hold on 
delete(children(2)) % delete old arrow tips 

for l=1:4:length(XData)-3 % paint new arrow tips, skipping the NaN-values 
    ArrowTips((l-1)/4+1)=fill(XData(l:l+2),YData(l:l+2),'r'); 
end 

Następnie można znaleźć uchwyty do końcówek strzałek w zmiennej ArrowTips. Możesz określić Kolor krawędzi i Facet w wywołaniu fill, przy czym tutaj będą odpowiednio czarne i czerwone.

+0

Przepraszam, pomieszałem różne podejścia. Zaktualizowałem kod, teraz powinien działać. Dziękuję za poprawienie mnie! –

Powiązane problemy