2014-09-08 49 views
19

Tôi đang cố vẽ một mũi tên trong biểu đồ MATLAB, mà không thành công.Làm thế nào để vẽ một mũi tên trong Matlab?

Mã dụ:

function [ output_args ] = example(input_args) 

figure ('Name', 'example'); 
x = [10 30] 
y = [10 30] 
xlim([1, 100]) 
ylim([1, 100]) 
arrow (x, y) ??? 
end 

Có bất kỳ chức năng trong matlab có thể vẽ mũi tên? Cảm ơn

+2

sử dụng 'annotation' –

+0

khi sử dụng "chú thích ('mũi tên', x, y)" Im nhận lỗi... ? – user3668129

+0

bạn đang sử dụng nó như thế nào? bạn nhập gì Dù sao có 2 câu trả lời dưới đây ... –

Trả lời

6

Bạn có thể sử dụng (cũng như các tài liệu) DaVinci Draw toolbox (tiết lộ đầy đủ: Tôi đã viết/bán hộp công cụ, mặc dù mũi tên là miễn phí). Ví dụ về cú pháp và đầu ra ví dụ dưới đây.

davinci('arrow', 'X', [0 10], 'Y', [0 2], <plus-lots-of-options>) 

enter image description here

8

Bạn có thể sử dụng arrow from the file exchange. arrow(Start,Stop) vẽ một đường thẳng với mũi tên từ Start to Stop (điểm phải là vectơ có chiều dài 2 hoặc 3 hoặc ma trận có 2 hoặc 3 cột) và trả về xử lý đồ họa của (các) mũi tên.

Chỉnh sửa: @Lama cũng đúng, bạn có thể sử dụng annotation nhưng bạn cần tính đến giới hạn cốt truyện.

annotation('arrow',x,y) 

tạo ra một đối tượng mũi tên chú thích mà kéo dài từ điểm xác định bởi x (1), y (1) đến điểm xác định bởi x (2), y (2), quy định tại đơn vị con số bình thường . Bạn có thể sử dụng chức năng Data space to figure units conversion (ds2nfu.m) từ trao đổi tệp để làm cho cuộc sống của bạn dễ dàng hơn.

[xf yf]=ds2nfu(x,y); 
annotation(gcf,'arrow', xf,yf) 

enter image description here

Lưu ý rằng có một số tính năng không có giấy tờ cho phép ghim chú thích để đồ thị nếu đó là cần thiết, đọc thêm về nó here ...

+0

+1 - Tôi đã sử dụng 'mũi tên' trong nhiều năm. – rayryeng

38

Bạn có thể lạm dụng quiver, bằng cách này bạn không cần phải đối phó với các đơn vị con số bình thường không khéo tay bằng cách sử dụng annotation

drawArrow = @(x,y) quiver(x(1),y(1),x(2)-x(1),y(2)-y(1),0)  

x1 = [10 30]; 
y1 = [10 30]; 

drawArrow(x1,y1); hold on 

x2 = [25 15]; 
y2 = [15 25]; 

drawArrow(x2,y2) 

enter image description here

quan trọng là lập luận 5th của quiver: giúp chặn đứng một tỉ lệ khác mặc định, như chức năng này được thực sự sử dụng để vẽ các lĩnh vực vector. (Hoặc sử dụng poperty giá trị cặp 'AutoScale','off')

Bạn cũng có thể thêm tính năng bổ sung:

drawArrow = @(x,y,varargin) quiver(x(1),y(1),x(2)-x(1),y(2)-y(1),0, varargin{:})  
drawArrow(x1,y1); hold on 
drawArrow(x2,y2,'linewidth',3,'color','r') 

enter image description here

Nếu bạn không thích các đầu mũi tên, bạn cần phải quay trở lại chú thích và điều này Câu trả lời là may hữu ích:

How do I change the arrow head style in quiver plot?


Một số nhận xét về nhận xét:

Kích thước đầu mũi tên có thể được điều chỉnh với thuộc tính 'MaxHeadSize', không phù hợp.Các giới hạn trục cần phải được đặt sau

x1 = [10 30]; 
y1 = [10 30]; 
drawArrow(x1,y1,{'MaxHeadSize',0.8,'Color','b','LineWidth',3}); hold on 

x2 = [25 15]; 
y2 = [15 25]; 
drawArrow(x2,y2,{'MaxHeadSize',10,'Color','r','LineWidth',3}); hold on 

xlim([1, 100]) 
ylim([1, 100]) 

enter image description here


The solution by sed có vẻ là tốt nhất, bởi vì nó cung cấp đầu mũi tên có thể điều chỉnh.

tôi chỉ muốn quấn nó vào một hàm:

function [ h ] = drawArrow(x,y,xlimits,ylimits,props) 

xlim(xlimits) 
ylim(ylimits) 

h = annotation('arrow'); 
set(h,'parent', gca, ... 
    'position', [x(1),y(1),x(2)-x(1),y(2)-y(1)], ... 
    'HeadLength', 10, 'HeadWidth', 10, 'HeadStyle', 'cback1', ... 
    props{:}); 

end 

mà bạn có thể gọi từ kịch bản của bạn như sau:

drawArrow(x1,y1,[1, 100],[1, 100],{'Color','b','LineWidth',3}); hold on 
drawArrow(x2,y2,[1, 100],[1, 100],{'Color','r','LineWidth',3}); hold on 

đem lại cho bạn kết quả khá tương đồng:

enter image description here

+0

Cảm ơn, Nhưng nếu tôi muốn xem giới hạn đồ thị (1..100) là nó có thể? – user3668129

+0

thêm 'xlim ([1, 100]); ylim ([1, 100]) 'giống như mọi khi – thewaywewalk

+0

dường như không hoạt động ... hãy thử nó – user3668129

6

Trong số các giải pháp khác, dưới đây là một giải pháp sử dụng annotation nơi bạn có thể đặt thuộc tính mũi tên bao gồm (x,y,width,height)trong các trục hiện tại, thuộc tính đầu và dòng.

h=annotation('arrow'); 
set(h,'parent', gca, ... 
    'position', [50 5 20 2], ... 
    'HeadLength', 1000, 'HeadWidth', 100, 'HeadStyle', 'hypocycloid', ... 
    'Color', [0.4 0.1 0.8], 'LineWidth', 3); 

cho

enter image description here

+0

+1 trong mắt của tôi tốt nhất không Giải pháp -File-Exchange. Tôi pimped ý tưởng của bạn một chút để làm cho nó linh hoạt hơn. – thewaywewalk

2

Bạn cũng có thể sử dụng ví dụ

text(x,y,'\leftarrow t_1','FontSize',12,'FontWeight','bold') 

See illustration

Các vấn đề liên quan