Chcę utworzyć obrazy takie jak to z podwójnej precyzji macierzy przy użyciu MATLAB.Jak wizualizować macierz z wyświetlonymi kolorami i wartościami?
Przykładowy obraz:
Chcę utworzyć obrazy takie jak to z podwójnej precyzji macierzy przy użyciu MATLAB.Jak wizualizować macierz z wyświetlonymi kolorami i wartościami?
Przykładowy obraz:
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:
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.
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.
h = imagesc(magic(8))
impixelregion(h)
http://www.mathworks.com/help/toolbox/images/ref/impixelregion.html
Wymaga Przetwarzanie obrazu Toolbox
+1: To cudownie szalone podejście. Mam nadzieję, że OP spróbuje tego ... –
+1: Znacznie lepsza ekspozycja niż pod warunkiem. –
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
@Amro: Dobra sugestia! Włączyłem go do kodu. – gnovice