Jak wizualizować matrycę z wyświetlanymi kolorami i wartościami?

Chcę tworzyć takie obrazy z matrycy podwójnej precyzji za pomocą MATLAB.

Przykładowy obrazek: alt text

Http://twitpic.com/2xs943

Author: EJG89, 2010-10-15

4 answers

Możesz tworzyć tego rodzaju wykresy samodzielnie dość łatwo, korzystając z wbudowanych funkcji imagesc oraz text i dostosowanie wielu 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 generowana liczba:

alt text

Jeśli napotkasz problemy z zaznaczonymi etykietami osi x, które są zbyt szerokie i nakładają się na siebie, oto jak możesz sobie z tym poradzić:

  • Nowsze wersje MATLAB: nie pewne, która wersja została dodana, ale w nowszych wersjach obiekty axes mają teraz właściwości '{X|Y|Z}TickLabelRotation', które pozwalają na obracanie etykiet i lepsze ich dopasowanie.

  • Starsze wersje MATLAB: dla starszych wersji można znaleźć kilka zgłoszeń na MathWorks File Exchange, które mogą obracać tekst etykiety znacznika, jak XTICKLABEL_ROTATE z Brian Katz .

 89
Author: gnovice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-12 03:02:50
h = imagesc(magic(8))
impixelregion(h)

Http://www.mathworks.com/help/toolbox/images/ref/impixelregion.html

Wymaga Przybornika Do Obróbki Obrazu alt text

 18
Author: MatlabDoug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-20 15:31:22

Jeśli zależy Ci tylko na oglądaniu wpisów zerowych/niezerowych w Twojej macierzy (np. jeśli jest ona rzadka), użyj spy.

Else, use imagesc.

PS: nie mogę uzyskać dostępu do Twojego obrazu

 1
Author: Jacob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-15 14:17:41

Spodziewam się, że możesz przekonać Matlaba do narysowania tego, jeśli spojrzysz na wymianę plików, możesz znaleźć kogoś, kto już napisał kod. Ale byłoby o wiele łatwiej, jeśli nie masz kodu, korzystać z MS Excel.

EDIT: przemyślałem to i oto co wymyśliłem. Nie opanowałem publikowania grafiki do SO, więc zaufaj mi, to doprowadzi Cię do rozwiązania. Ale z Excelem byłoby łatwiej.

Najpierw zdefiniuj macierz z danymi wartości; wywołuję macierz G w poniższym Następnie wykonaj polecenia:

image(G); 
colormap(gray)

Musiałem trochę przeskalować dane, aby uzyskać dobrą grafikę, ale to powinno wytworzyć wykres w skali szarości z osiami liczbowymi. Teraz przejdź do okna rysunku i otwórz Narzędzia wykresu.

Wybierz oś X i naciśnij przycisk Ticks. Wszystko, co musisz teraz zrobić, to edytować etykiety do tekstów, które chcesz. Zrób to samo dla osi Y. Wpisz liczby w kwadraty na wykresie -- użyj pola tekstowego z menu adnotacje.

Po wielu bałaganach będziesz miał grafikę, którą chcesz. W tym momencie proponuję wybrać polecenie menu File / Generate m-File i właśnie to zrobić. Jeśli chcesz tworzyć taką grafikę programowo w przyszłości po prostu przekształć wygenerowany plik M w odpowiednią funkcję, która robi to, co chcesz.

Ale w Excelu jest o wiele łatwiej.
 1
Author: High Performance Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-15 16:03:10