Wpis o tym, jak usunąć kreseczki z obrazka

 

ONTLogo

Jak już ostatnio zachwalałem, w MATLAbie można tworzyć naprawdę piękne wykresy. Każdy, nawet początkujący użytkownik jest w stanie stworzyć przejrzysty i dobrze opisany wykres dzięki kilku prostym poleceniom, ewentualnie z drobną pomocą narzędzia Plot Tools. Z moich obserwacji wynika jednak, że jest grupa użytkowników, którym czytelny wykres do szczęścia nie wystarczy. Trafiają się osoby, które pragną, by wykres był po prostu perfekcyjny (co każdy oczywiście rozumie na swój własny, indywidualny sposób). Uświadomiła mi to kiedyś pewna pani Profesor, uczestniczka szkolenia z podstaw MATLABa, gdy w trakcie zajęć zadała proste z pozoru pytanie: jak usunąć z wykresu te małe, pomocnicze kreseczki. Niektórym wydaje się, że dla trenerów prowadzących różnego rodzaju kursy pytania proste i często powtarzające się muszą być jakąś straszną katorgą. Nic bardziej mylnego. Proste pytanie najczęściej umożliwia udzielania skomplikowanej odpowiedzi, co jednej strony pozwala zyskać w oczach kursantów uznanie i szacunek, z drugiej strony zmniejsza ilość czasu kursu, która mogłaby być wykorzystana na zadanie jakiegoś trudnego pytania. Nie daj Boże takiego,  na które trener nie zna odpowiedzi. Ponieważ pytanie było kolejnym z rzędu, nie miałem ochoty na szczególne rozwlekanie odpowiedzi i ograniczyłem się do stwierdzenia, że jeśli na wykresie przy pomocy polecenia grid on zostanie umieszczona pomocnicza siatka,  to usunąć ją można poleceniem grid off.

wykres

Pani Profesor uśmiechnęła się, uprzejmie podziękowała i poinformowała mnie, że to o inne kreseczki chodzi. W końcu udało się ustalić, że chodzi o podziałkę osi. To mnie nieco zbiło z pantałyku, jakoś nigdy nie przyszło mi do głowy, żeby usuwać podziałkę z wykresu i prawdę mówiąc nie wiedziałem, czy można. Bo po co? Cóż, względy estetyczne czasem przeważają nad praktycznymi, tak to już jest w życiu. W każdym razie okazało się, że pytanie nie jest trywialne.

Nie ma wbudowanej funkcji, która byłaby w stanie rozwiązać problem usuwania kreseczek z podziałki. Warto wiedzieć, że istniejace funkcje modyfikujące wykres, to najczęściej pewnego rodzaju skróty umożliwiające użytkownikowi realizację kilku popularnych zadań w uproszczony sposób. Tak dla przykładu, polecenie grid on to uproszczony zapis polecenia grid(ax, 'on'), gdzie ax to uchwyt do obiektu "oś wykresu". Sama funkcja grid też nie jest niezbędna. Siatkę wykresu możemy utworzyć bezpośrednio modyfikując parametry obiektu ax.

ax = axis;
ax.XGrid = 'on'
ax.YGrid = 'on'
% alternatywnie
set(ax, 'XGrid', 'on')
set(ax, 'YGrid', 'on')

Jak więc usunąć podziałkę? Wśród dostępnych do modyfikacji pól znajdziemy między innymi TickDir:

set(ax, 'TickDir', 'out')

Pozwala nam ono ustalić, w którą stronę kreseczki mają być wysunięte, do środka czy na zewnątrz (jak na powyższym obrazku). Nie rozwiązuje to jednak problemu, bo podziałka dalej jest widoczna. Miejsce pojawiania się kreseczek na podziałce jest określone poprzez pola XTick i YTick. Dzięki nim możemy podziałkę zagęścić ale możemy też ją całkowicie wyczyścić:

ax.XTick = [];
ax.YTick = [];

Podziałka zniknęła całkowicie. Łącznie z opisującymi ją wartościami (tym sposobem powstał obrazek z logo ONT widoczny na początku tego wpisu). Nie o to jednak chodziło. Kiedy pierwszy raz mierzyłem się z tym problemem rozwiązanie wyglądało tak:

  • Stworzyć wykres z widoczną podziałką skierowaną do środka (ustawienia standardowe).
  • Do okna wykresu (figure) dodać nową oś (axis), która przykryje oś starą, na nowej osi umieścić ten sam wykres.
  • Z osi drugiego wykresu usnąć całkowicie podziałkę, korzystając z m-kodu jak powyżej, wartości na osi wykresu będą widoczne dzięki pierwszemu wykresowi.

Problem można jednak rozwiązać o wiele łatwiej. Wystarczy określić, jaka ma być długość kreseczek podziałki i długość tę ustawić na 0 🙂

ax.TickLength = [0 0]

doce_no_tic

 

(Visited 150 times, 1 visits today)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *