2013-05-21 37 views
5

Có thể tô màu một số đơn (hoặc một tập hợp các số) trên một trong các trục trong MATLAB không?Làm cách nào tôi có thể gán nhiều màu để đánh dấu nhãn trong ô trong MATLAB?

Giả sử tôi có một cốt truyện:

plot(1:10, rand(1,10)) 

Bây giờ, tôi có thể ví dụ làm cho số 3 trên trục x màu đỏ?

+0

Đây có phải là nhãn x-tick mà bạn muốn sửa đổi không? – Schorsch

+0

Vâng, đó là nhãn x-tick. –

+2

Vui lòng xem phần thứ hai của câu trả lời cho [câu hỏi này] (http://stackoverflow.com/questions/16532176/how-to-add-marker-to-matlab-colorbar/16532405#16532405) - bạn sẽ có thể để sửa đổi điều đó để thay đổi màu sắc của một dấu tích đơn thay vì làm cho nó đậm (và sử dụng nó trên một trục bình thường thay vì một thanh màu). – wakjah

Trả lời

8

Thật không may, bạn không thể có nhiều màu cho nhãn đánh dấu trong một đối tượng trục. Tuy nhiên, có một giải pháp (lấy cảm hứng từ this page from MathWorks support site) đạt được hiệu quả tương tự. Nó phủ lên các trục hiện có với một trục khác chỉ có một dấu đỏ.

Dưới đây là một ví dụ:

figure 
plot(1:10, rand(1,10)) 
ax2 = copyobj(gca, gcf);        %// Create a copy the axes 
set(ax2, 'XTick', 3, 'XColor', 'r', 'Color', 'none') %// Keep only one red tick 
ax3 = copyobj(gca, gcf);        %// Create another copy 
set(ax3, 'XTick', [], 'Color', 'none')    %// Keep only the gridline 

Kết quả là:

result

+2

+1 đánh tôi vào cú đấm: P BTW, nhận ra bạn có thể làm điều này mà không cần sao chép nội dung của các trục, bằng cách thiết lập ''Color'' thành không, và sau đó đưa các trục phủ lên một' 'YLim' rỗng và cùng ''XLim''. – wakjah

+0

@wakjah Tôi không theo dõi, đối tượng nào tôi cần đặt 'Màu' cho? –

+0

Thay vì thực hiện một 'copyobj', bạn chỉ có thể tạo một' trục' thứ hai và đặt 'Màu' trên đó; đặt nó thành ''none'' sẽ làm cho nền trong suốt. – wakjah

3

Là một thay thế để sao chép toàn bộ nội dung các trục, người ta có thể làm được điều này cũng bằng cách tạo thêm axes đối tượng :

ax = axes(); 
p = plot(1:10, rand(1,10)); 
myTick = 3; 

% Create new axes with transparent backgrounds 
ax2 = axes(); 
ax3 = axes(); 
set([ax2 ax3], 'XLim', xlim(ax)); 
set([ax2 ax3], 'Color', 'none'); 

set(ax3, 'XTick', [], 'YTick', []); 

% Give one new axes a single tick mark 
set(ax2, 'YTick', []); 
set(ax2, 'XTick', myTick); 
set(ax2, 'XColor', 'r'); 

% This line is necessary to use the plot toolbar functions like zoom/pan 
linkaxes([ax ax2 ax3]); 
+0

+1: bạn không cần 'linkaxes' nếu bạn đang đặt' XLim' theo cách thủ công;) –

+0

Bạn làm gì nếu muốn sử dụng zoom của thanh công cụ :) – wakjah

+0

Right :) Also, you có thể làm 'xlim (ax)' thay vì 'get (axe, 'XLim')', nó ngắn hơn. –

4

Nhãn đánh dấu đơn có thể được tô màu bằng cách sử dụng tex markup, được kích hoạt cho nhãn đánh dấu theo mặc định. Nó được xác định trong thuộc tính TickLabelInterpreter của trục.

Nó cung cấp hai lệnh cho văn bản màu:

  • \color{<name>}, nơi <name> là một cái tên màu như “đỏ” hay “xanh”, và
  • \color[rgb]{<R>,<G>,<B>}, nơi <R>, <G><B> là những con số giữa 0 và 1 và xác định màu RGB.

Những lệnh này có thể được sử dụng để tô màu cho nhãn đánh dấu duy nhất:

plot(1:10, rand(1,10)) 
ax = gca; 

% Simply color an XTickLabel 
ax.XTickLabel{3} = ['\color{red}' ax.XTickLabel{3}]; 

% Use TeX symbols 
ax.XTickLabel{4} = '\color{blue} \uparrow'; 

% Use multiple colors in one XTickLabel 
ax.XTickLabel{5} = '\color[rgb]{0,1,0}green\color{orange}?'; 

% Color YTickLabels with colormap 
nColors = numel(ax.YTickLabel); 
cm = jet(nColors); 
for i = 1:nColors 
    ax.YTickLabel{i} = sprintf('\\color[rgb]{%f,%f,%f}%s', ... 
     cm(i,:), ax.YTickLabel{i}); 
end 

Và đây là cách kết quả trông:

result

Mã này đã làm việc cho tôi trong MATLAB R2016b và R2017a.

+0

Điều này có vẻ tuyệt vời! Tôi không thể kiểm tra nó mặc dù, vì tôi không còn có MATLAB. :( –

+0

Đó là khá gọn gàng thực sự.Với nhiều tính năng đồ họa tiện dụng mới, điều này chỉ hoạt động cho HG2 của khóa học, vì vậy cho các phiên bản MATLAB> = R2014b. – Hoki

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