Tôi muốn tạo các hình ảnh như thế này từ ma trận độ chính xác kép bằng MATLAB.Làm cách nào để tôi hình dung một ma trận có màu sắc và giá trị được hiển thị?
Ảnh mẫu:
Tôi muốn tạo các hình ảnh như thế này từ ma trận độ chính xác kép bằng MATLAB.Làm cách nào để tôi hình dung một ma trận có màu sắc và giá trị được hiển thị?
Ảnh mẫu:
Bạn có thể tạo loại này vẽ cho mình khá dễ dàng bằng cách sử dụng built-in chức năng imagesc
và text
và điều chỉnh một số tham số cho đối tượng đồ họa.Dưới đây là một ví dụ:
mat = rand(5); %# A 5-by-5 matrix of random values from 0 to 1
imagesc(mat); %# Create a colored plot of the matrix values
colormap(flipud(gray)); %# Change the colormap to gray (so higher values are
%# black and lower values are white)
textStrings = num2str(mat(:),'%0.2f'); %# Create strings from the matrix values
textStrings = strtrim(cellstr(textStrings)); %# Remove any space padding
[x,y] = meshgrid(1:5); %# Create x and y coordinates for the strings
hStrings = text(x(:),y(:),textStrings(:),... %# Plot the strings
'HorizontalAlignment','center');
midValue = mean(get(gca,'CLim')); %# Get the middle value of the color range
textColors = repmat(mat(:) > midValue,1,3); %# Choose white or black for the
%# text color of the strings so
%# they can be easily seen over
%# the background color
set(hStrings,{'Color'},num2cell(textColors,2)); %# Change the text colors
set(gca,'XTick',1:5,... %# Change the axes tick marks
'XTickLabel',{'A','B','C','D','E'},... %# and tick labels
'YTick',1:5,...
'YTickLabel',{'A','B','C','D','E'},...
'TickLength',[0 0]);
và đây là con số này tạo ra:
Nếu bạn chạy vào rắc rối với các nhãn đánh dấu trục x bạn chọn quá rộng và một chồng chéo khác, đây là làm thế nào bạn có thể xử lý nó:
Mới hơn phiên bản của MATLAB: Không chắc đó đã rsion này đã được thêm vào, nhưng trong các phiên bản mới hơn, các đối tượng trục bây giờ có properties '{X | Y | Z} TickLabelRotation', cho phép bạn xoay các nhãn và phù hợp với chúng hơn.
phiên bản cũ của MATLAB: Đối với các phiên bản cũ hơn, bạn có thể tìm thấy một số đệ trình trên MathWorks File Exchange có thể xoay văn bản nhãn đánh dấu, như XTICKLABEL_ROTATE từ Brian Katz.
Tôi hy vọng bạn có thể thuyết phục Matlab để vẽ đó, nếu bạn nhìn vào Sở Giao dịch tập tin bạn có thể thấy ai đó đã viết mã. Nhưng nó sẽ dễ dàng hơn nhiều, nếu bạn không có mã, để sử dụng MS Excel.
EDIT: Vì vậy, tôi đã đưa ra một số suy nghĩ và đây là những gì tôi nghĩ ra. Tôi đã không làm chủ được đồ họa gửi lên SO, vì vậy tôi tin tưởng, điều này sẽ dẫn bạn đến một giải pháp. Nhưng nó sẽ thành thật hơn với Excel.
Đầu tiên xác định ma trận với các giá trị dữ liệu của bạn; Tôi gọi ma trận G
trong phần sau. Sau đó, thực hiện các lệnh:
Bây giờ, tôi phải làm một số việc khó hiểu Bây giờ, đi đến cửa sổ hình của bạn và mở các công cụ cốt truyện.
Chọn trục X và nhấn nút Ticks
. Tất cả những gì bạn phải làm bây giờ là chỉnh sửa nhãn cho các văn bản mà bạn muốn. Làm tương tự cho trục Y. Viết các số vào ô vuông trên ô - sử dụng Hộp văn bản từ menu Ghi chú.
Sau nhiều điều không quan tâm về bạn sẽ có đồ họa bạn muốn. Tại thời điểm này, tôi đề nghị bạn chọn lệnh menu File | Tạo M-File và làm điều đó. Nếu bạn muốn tạo đồ họa như vậy trong tương lai, chỉ cần bật tệp M được tạo thành một hàm phù hợp để thực hiện những gì bạn muốn.
Nhưng Excel vẫn dễ dàng hơn nhiều.
h = imagesc(magic(8))
impixelregion(h)
http://www.mathworks.com/help/toolbox/images/ref/impixelregion.html
Yêu cầu xử lý hình ảnh Toolbox
+1: Đây là cách tiếp cận kỳ diệu. Tôi hy vọng rằng OP sẽ cố gắng ... –
+1: Triển lãm tốt hơn nhiều so với tôi đã cung cấp. –
cho giải pháp tổng quát hơn, bạn nên so sánh với 'mean (get (gca, 'CLim'))' thay vì '0,5' để xác định màu của văn bản trên nền màu xám xám. – Amro
@Amro: Đề xuất tốt! Tôi kết hợp nó vào mã. – gnovice