2012-02-17 20 views
13

Tôi có một câu hỏi rất đơn giản, đối với người dùng MATLAB:MATLAB: Thay đổi các thuộc tính dòng của một hình được tải?

Nếu tôi tải một tệp hình (.fig) bằng lệnh tải, có cách nào để thay đổi thuộc tính đường vẽ từ dòng lệnh không? (chiều rộng, màu sắc, điểm đánh dấu, vv)

PD: Hai tùy chọn đầu tiên theo thông tin trong Defining the Color of Lines for Plotting On this page… chỉ hoạt động nếu bạn sử dụng lệnh lô. Rõ ràng họ là vô ích nếu bạn tải hình.

Trả lời

17

bạn có thể nhận được xử lý cho các đối tượng tất cả các dòng trên con số hiện tại với FINDOBJ chức năng:

hline = findobj(gcf, 'type', 'line'); 

Sau đó, bạn có thể thay đổi một số tài sản cho tất cả các dòng đối tượng:

set(hline,'LineWidth',3) 

hoặc chỉ cho một số trong số họ:

set(hline(1),'LineWidth',3) 
set(hline(2:3),'LineStyle',':') 
idx = [4 5]; 
set(hline(idx),'Marker','*') 
+0

Cảm ơn bạn rất nhiều! Điều đó làm việc tốt! – aarelovich

2

Để thao tác các đối tượng trong hình, bạn cần có quyền truy cập vào các chốt của chúng. Nếu bạn tạo một con số bằng cách sử dụng các chức năng vẽ biểu đồ, chúng sẽ trả về các xử lý cho bạn. Khi bạn đang mở một hình, như trường hợp của bạn, bạn cần phải thực hiện theo một cây đối tượng đồ họa để tìm tay cầm cho phần tử cụ thể mà bạn muốn thao tác.

This page có thông tin về cấu trúc của đối tượng đồ họa.

Đường dẫn đến những xử lý mà bạn muốn sẽ phụ thuộc vào vóc dáng của bạn, nhưng, như một ví dụ, nếu con số của bạn đã được tạo ra bằng cách sử dụng plot lệnh đơn giản, đây sẽ là một cách để thay đổi thuộc tính dòng:

x = 0:0.1:2; 
plot(x,sin(x)); 

fig = gcf % get a handle to the current figure 
% get handles to the children of that figure: the axes in this case 
ax = get(fig,'children') 
% get handles to the elements in the axes: a single line plot here 
h = get(ax,'children') 
% manipulate desired properties of the line, e.g. line width 
set(h,'LineWidth',3) 
+0

Cảm ơn thông tin. Tôi sẽ xem xét. Tuy nhiên tôi tìm thấy sự thay thế ở trên, trực quan hơn. – aarelovich

2

Ngoài @yuk câu trả lời, nếu bạn có một huyền thoại rút ra cũng,

hline = findobj(gcf, 'type', 'line'); 

sẽ trở lại N x 3 dòng (hoặc chính xác hơn - lines plotted + 2x lines in legend). Tôi sẽ ở đây chỉ xem xét trường hợp khi tất cả các dòng được vẽ cũng có trong truyền thuyết.

Trình tự là lạ: trong trường hợp của 5 dòng (chúng ta hãy lưu ý họ 1 to 5) âm mưu và truyền thuyết nói thêm, bạn sẽ có

hline: 
1 : 5 th line (mistical)  
2 : 5 th line (in legend) 
3 : 4 th line (mistical)  
4 : 4 th line (in legend) 
5 : 3 th line (mistical)  
6 : 3 th line (in legend) 
7 : 2 th line (mistical)  
8 : 2 th line (in legend) 
9 : 1 th line (mistical)  
10: 1 th line (in legend) 
11: 5 th line (in plot) 
12: 4 th line (in plot) 
13: 3 th line (in plot) 
14: 2 th line (in plot) 
15: 1 th line (in plot) 

Là một giải pháp (thứ sáu buổi tối trì hoãn) Tôi làm điều này nhỏ bé:

giải pháp 1: nếu bạn không muốn thiết lập lại truyền thuyết

Phát hiện nếu có một truyền thuyết và bao nhiêu lin es được vẽ:

hline = findobj(gcf, 'type', 'line'); 
isThereLegend=(~isempty(findobj(gcf,'Type','axes','Tag','legend'))) 

if(isThereLegend) 
    nLines=length(hline)/3 
else 
    nLines=length(hline) 
end 

Đối với mỗi dòng tìm ra xử lý đúng đắn và làm những thứ cho dòng đó (nó cũng sẽ áp dụng cho dòng huyền thoại tương ứng)

for iterLine=1:nLines 
    mInd=nLines-iterLine+1 
    if(isThereLegend) 
     set(hline([(mInd*2-1) (mInd*2) (2*nLines+mInd)]),'LineWidth',iterLine) 
    else 
    set(hline(mInd),'LineWidth',iterLine)  
    end 
end 

Điều này làm cho mỗi dòng i-th với width=i và tại đây bạn có thể thêm thuộc tính tự động thay đổi;

Giải pháp 2: Giữ nó đơn giản

Loại bỏ các truyền thuyết, chăm sóc của các dòng, thiết lập lại truyền thuyết.

legend off 
hline = findobj(gcf, 'type', 'line'); 
nLines=length(hline) 

for iterLine=1:nLines 
    mInd=nLines-iterLine+1 
    set(hline(mInd),'LineWidth',iterLine)  
end 
legend show 

Điều này có thể không phù hợp với các tình huống khi huyền thoại phải được đặt trong một số nơi speciffic, vv

0

Bạn có thể nhấp chuột cũng vừa phải trên dòng trong trình xem và thay đổi các thuộc tính đó. Điều này cũng thay đổi mục nhập 'huyền thoại' tương ứng (ít nhất là trong năm 2014b).

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