2010-10-15 11 views

Odpowiedz

87

Można tworzyć tego rodzaju działki siebie dość łatwo za pomocą wbudowanego funkcje imagesc i oraz dostosowywanie liczby parametrów dla obiektów graficznych.Oto przykład:

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]); 

A oto figura ta generuje:

alt text

Jeśli napotkasz kłopoty z oś x kleszczy etykiet do wyboru jest zbyt szeroka i nakładają się na siebie, tutaj w jaki sposób można go obsługiwać:

  • Nowsze wersje MATLAB: Nie wiesz, który ve rsion został dodany, ale w nowszych wersjach obiekty osi mają teraz properties "{X | Y | Z} TickLabelRotation", które umożliwiają obracanie etykiet i dopasowanie ich.

  • Starsze wersje MATLAB: W starszych wersjach można znaleźć kilka uwag na MathWorks File Exchange które można obrócić tekst etykiety kleszcz, jak XTICKLABEL_ROTATE z Brian Katz.

+1

+1: Znacznie lepsza ekspozycja niż pod warunkiem. –

+4

dla bardziej ogólnego rozwiązania, powinieneś porównać z 'mean (get (gca, 'CLim'))' zamiast '0,5' aby określić kolor tekstu na tle mapy kolorów w skali szarości. – Amro

+0

@Amro: Dobra sugestia! Włączyłem go do kodu. – gnovice

1

Spodziewam się można przekonać, że Matlab zwrócić, jeśli spojrzeć na Giełdzie pliku można znaleźć ktoś już napisany kod. Ale byłoby znacznie łatwiej, jeśli nie masz kodu, aby użyć MS Excel.

EDYCJA: Więc dałem temu więcej uwagi i oto co wymyśliłem. Nie opanowałem wysyłania grafiki do SO, więc uwierz mi, to doprowadzi cię do rozwiązania. Ale w programie Excel byłoby naprawdę łatwiej.

Najpierw zdefiniuj macierz z wartościami danych; Nazywam matrycę G poniżej. Następnie wykonać polecenia:

image(G); 
colormap(gray) 

Teraz musiałem zrobić jakiś błahy wokół przeskalowania danych, aby uzyskać dobrą grafikę, ale to powinno produkować działkę skali szarości z osi liczbowych. Teraz przejdź do swojego okna rysunku i otwórz narzędzia plotowania.

wybrać oś X i naciśnij przycisk Ticks. Teraz wystarczy edytować etykiety do żądanych tekstów. Zrób to samo dla osi Y. Zapisz liczby w kwadratach na wykresie - użyj pola tekstowego z menu Adnotacje.

Po wielu zabawach będziesz mieć grafikę, którą chcesz. W tym momencie proponuję wybrać polecenie menu Plik | Generuj plik M i rób to. Jeśli chcesz w przyszłości programowo tworzyć taką grafikę, po prostu przekształć wygenerowany plik M w odpowiednią funkcję, która robi to, co chcesz.

Ale w Excelu jest jeszcze łatwiej.

1

Jeśli zależy Ci tylko na analizowaniu zerowych/niezerowych wpisów w macierzy (np. Jeśli są rzadkie), użyj spy.

Else, należy imagesc.

PS: Nie można uzyskać dostępu do obrazu