MATLAB Rysunki

MATLAB RYSUNKI - CZYLI JAK UŁATWIĆ SOBIE ŻYCIE

Wkurza Cię, że MATLAB za każdym razem rysuje rysunek zasłaniając editor z Twoim programem? Trudno jest przeglądać kilkanaście okien z wykresami? Musisz ręcznie skalować okna i je przenosić? A  może chcesz wyświetlić rysunek na drugim monitorze? W tym wpisie znajdziesz porady jak uporać się z irytującymi przypadłościami rysunków w MATLABie i znacznie poprawić komfort pracy.
Trochę niezbędnej teorii…

Do kontroli właściwości elementów wizualnych wyświetlanych przez MATLABa służą obiekty typu graficznego (Graphics Objects). Obiekty te mają strukturę hierarchiczną zgodnie z poniższym rysunkiem. Hierarchiczna struktura obiektów graficznych odzwierciedla relacje rodzic – dziecko i umożliwia dziedziczenie właściwości rodzica przez obiekt dziecko.

Jak to wygląda w praktyce? Na przykład jeżeli używamy funkcji plot, to w pierwszej kolejności tworzony jest obiekt nadrzędny figure czyli okno. Na tym poziomie mamy dostęp do zmiany najbardziej ogólnych właściwości obiektu takich jak: położenie okna, jego rozmiar i kolor, rodzaj wyświetlanego menu, itp. Okno jest więc swego rodzaju „zewnętrznym pojemnikiem” na podrzędne obiekty (dzieci), które będą tworzyć konkretne elementy rysunku.

Następnie jest tworzony obiekt typu axes, który zawiera definicje parametrów związanych z osiami współrzędnych danego rysunku. To w tym obiekcie można zmieniać takie właściwości jak rodzaj i wielkość czcionki używanej do opisu osi, rodzaj etykiety osi, zakres wyświetlanych wartości na danej osi, itp. Axes jest więc podrzędnym elementem okna, swego rodzaju płótnem o określonych właściwościach na którym będą rysowane konkretne elementy.

Axes jest rodzicem dla takich obiektów jak linie, legenda, tekst, itp. a więc tych obiektów, które bezpośrednio odpowiadają za zawartość graficzną rysunku i reprezentują dane oraz opisy wprowadzone przez użytkownika. Właściwości tych obiektów takie jak kolor, rozmiar, itp. również możemy zmieniać.

Tyle teorii. Używając notacji z kropką (od wersji MATLABa 2014b) można zmieniać wszystkie właściwości obiektów graficznych; od położenia i rozmiaru okna po nachylenie opisu osi współrzędnych i przeźroczystość danych elementów.

W tym miejscu nie będę jednak pisał o zmianie oczywistych cech obiektów takich jak na przykład kolor i grubość rysowanych linii za pomocą funkcji plot. Skupię się na tych właściwościach, które są mniej znane, a pozwalają znacznie usprawnić pracę z oknami i spowodować, że będzie ona o wiele bardziej wygodna.

Root properties

MonitorPositions – właściwość ta wyłącznie zwraca wartości i jest przydatna szczególnie wtedy, gdy do komputera mamy podłączone dwa lub więcej monitorów. Zwraca ona informacje o ich liczbie, położeniu początku każdego obrazu względem punktu (0,0) czyli lewego dolnego rogu ekranu, oraz rozmiarze każdego obrazu. Dla dwóch monitorów, gdzie każdy wyświetla obraz o rozdzielczości  1920 x 1200, otrzymujemy:

r = groot;
monitors = r.MonitorPositions

monitors =

           1           1        1920        1200
        1921           1        1920        1200

Właściwość MonitorPositions jest bardzo przydatna do aranżowania generowanych przez MATLABa okien wg własnego uznania o czym więcej za chwilę.

Figure Properties

WindowStyle 'normal' (default) | 'modal' | 'docked' – czy denerwuje Was, że MATLAB generuje nowe rysunki jeden na drugim zasłaniając pole editora? Oczywiście można ręcznie ‘zadokować’ rysunek w interfejsie MATLABA, ale robić to ręcznie za każdym razem jest udręką. Z pomocą przychodzi właściwość WindowStyle. Wystarczy ustawić jej wartość na docked i utworzone okno automatycznie będzie wyświetlane jako panel interfejsu. Daje to dużą oszczędność miejsca i ‘klikania’ jeżeli często uruchamiamy ten sam program.

fig01 = figure; 
fig01.WindowStyle = 'docked';
plot([1 2], [2 3]);

WindowState 'normal' (default) | 'minimized' | 'maximized' | 'fullscreen' – chcecie aby nowy rysunek miał maksymalny rozmiar albo był wyświetlany na całym ekranie zasłaniając nawet pasek systemu operacyjnego? Albo nie chcecie aby był wyświetlany „na górze” innych okien tylko został ukryty w trayu? Wystarczy zmienić ustawienia WindowState i gotowe.

fig01 = figure; 
fig01.WindowState = 'fullscreen';
plot([1 2], [2 3]);

Position [left bottom width height] – cecha zwraca współrzędne rysunku oraz jego szerokość i wysokość. Należy pamiętać, że punkt o współrzędnych (0, 0) znajduje się w lewym dolnym rogu ekranu. Punkt odniesienia rysunków jest interpretowany tak samo. Zmieniając te wartości można zmieniać proporcje rysunku oraz jego położenie. Jest to szczególnie przydatne, kiedy mamy dwa monitory i na jednym chcemy pracować z editorem i głównym oknem MATLABa, a na drugim chcemy wyświetlać wyniki i rysunki. Domyślnie taka konfiguracja nie jest możliwa, gdyż MATLAB zawsze wyświetla rysunek na tle głównego okna. Można to łatwo zmienić i tym samym bardzo podnieść komfort pracy:

%% Root properties
r = groot;
monitors = r.MonitorPositions
 
%% Figure properties
% Pierwszy rysunek na pierwszym monitorze w lewym górnym rogu
fig01 = figure; 
fig01.Position = [monitors(1,1) monitors(1,4)/2 560 420];
plot([1 2], [2 3]);
 
% Drugi rysunek na drugim monitorze w lewym górnym rogu
fig02 = figure; 
fig02.Position = [monitors(2,1) monitors(2,4)/2 560 420];
plot([1 2], [3 2]);
Axes Properties

W tej grupie występuje bardzo dużo cech obiektów, które można kontrolować – wystarczy zajrzeć do systemu pomocy MATLABa. Właściwości z grupy axes używamy najczęściej do zmiany rozmiaru i typu czcionki na rysunku. Jednak podejście do tego w standardowy sposób powoduje, że zmianie ulegają cechy wszystkich czcionek na rysunku jednocześnie, przez co tytuł, opisy osi, wartości zmiennej – wszystkie te elementy wyglądają tak samo:

%% Root properties
r = groot;
monitors = r.MonitorPositions

%% Figure properties
% Pierwszy rysunek na pierwszym monitorze w lewym górnym rogu
fig01 = figure; 
fig01.Position = [monitors(1,1) monitors(1,4)/2 560 420];
plot([1 2 3 4], [2 3 0 1]);
title(['Sygnał zarejestrowany']);
xlabel('Zmienna1 [-]'); ylabel('Zmienna2 [-]');
 
%% Zmiana wszystkich opisów jednocześnie
ax = gca; 
ax.FontSize = 14;
ax.TickDir = 'out';
ax.TickLength = [0.03 0.03];

Jak kontrolować cechy czcionki niezależnie dla XLabel, Ylabel, Title itp.? Oto rozwiązanie:

%% Zmiana tytułu niezależnie
ax.Title.String = 'My Title';
ax.Title.FontSize = 10;
ax.Title.FontWeight = 'normal';

%% Zmiana osi X niezależnie
ax.XLabel.FontSize = 8;

%% Zmiana osi Y niezależnie
ax.YLabel.FontSize = 12;
ax.YLabel.FontWeight = 'bold';

Jak widać możliwości jest bardzo dużo i w pokazany sposób można kontrolować wiele cech rysunków. Polecam zobaczyć listę możliwych zmian w systemie pomocy. Odpowiednia aranżacja okien i rysunków pozwala zaoszczędzić dużo czasu i klikania. A dobrze przygotowany i sformatowany rysunek będzie bardziej czytelny i będzie się lepiej prezentował po eksporcie do dokumentu czy prezentacji.

Do zmiany właściwości obiektów graficznych można podejść na dwa sposoby. Zmienić je w obrębie danego okna (co pokazałem w tym wpisie), albo sesji MATLABa, lub wprowadzić zmiany na stałe do programu z użyciem cechy default.

O tym jak na zawsze ustalić cechy/formatowanie rysunków, tak aby nie trzeba było tego robić za każdym razem, będzie w następnym wpisie.

(Visited 511 times, 1 visits today)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *