2015-03-15 20 views
5

Generuję wiele wykresów różnych zestawów danych po sobie za pomocą MATLAB. Chciałbym, aby pozycje legendy były takie, aby nie nakładały się na linie kreślone i byłoby idealnie, gdyby to miejsce mogło być wykonane automatycznie.Umieść legendę MATLAB w taki sposób, aby nie nakładała się na działce.

Jestem świadomy ustawienia 'Location' na 'best', aby to osiągnąć, ale umieszczenie legendy wydaje się być niezręczne przy użyciu 'best' (poniżej). Chciałbym, żeby legenda znalazła się w fabule. Natrafiłem też na sposób, aby legenda stała się przezroczysta (here), tak aby nie wyświetlała się ona w postaci niewidocznej, ale wyraźnie umieszczenie jej w innym miejscu jest tym, czego szukam. The awkwardly placed legend

Czy istnieje sposób, aby umieścić legendę w skrajnych obrazu ('NorthWest', 'SouthWest' etc) automatycznie, tak że nie zachodzą na kreślonych danych (siebie z metod proponowanych powyżej)?

+1

Być może mógłbyś użyć właściwości 'Position' zamiast' Location'? To wymagałoby drobnego poprawienia. Możesz zrobić listę, powiedzmy, 4-6 pozycji, w których uważasz, że pozycja jest w porządku, a następnie sprawdź dane dla tych pozycji. Na przykład na danym wykresie nie jest trudno wyliczyć, że dla pierwszych 5 x wartości dostępny jest niższy zakres wykresu, a zatem byłoby to odpowiednie miejsce do umieszczenia legendy. –

+1

Nie można tego teraz wypróbować - ale co się stanie, jeśli użyjesz 'best', określisz pozycję legendy (jestem pewien, że jest to właściwość, którą możesz odczytać), wymyślić, jaki jest najbliższy kąt, a następnie przesuń ją? Powinna istnieć możliwość wykonania tej małej funkcji, którą wywołujesz z żądanymi osiami jako argumentem. – Floris

Odpowiedz

0

Więc próbowałem za pomocą Location zamiast Position? Na przykład:

x =1:100; 
y = x.^2; 
lgd = legend('y = x.^2'); 
set(lgd,'Location','best') 

Czy otrzymujesz poprawne wyniki? Szybkim sposobem rozwiązania tego byłoby nadal korzystać Location z best i wyodrębnić współrzędne:

lgd.Position 

Powinieneś otrzymać coś takiego:

ans = 

    0.7734 0.3037 0.1082 0.0200 

który mapuje do:

[left bottom width height] 

Konieczne jest skupienie się na lewej i na dole. Te dwie wartości, lewa i dolna, określają odległość od lewego dolnego rogu figury do lewego dolnego rogu legendy i są one analogiczne do ramki siatki, której używasz.

Następnie, w zależności od wielkości ramy (Proponuję użyć axis([XMIN XMAX YMIN YMAX]) do tego, jeśli to możliwe), można wskazać pozycję legendy w siatce. Co możesz zrobić dalej, to sprawdź, czy i które z twoich wykresów na wykresie krzyżują ścieżki z legendą (może zdefiniuj relatywną funkcję odległości opartą na pewnym progu odległości), a jeśli tak, to losowo zmień położenie legendy (tj. Zmień wartości left i bottom) i powtarzaj aż do spełnienia warunków.

Jeśli nadal ci to przeszkadza, mogę napisać krótki fragment. Wreszcie, wiedz, że zawsze możesz zdecydować się na umieszczenie legendy na zewnątrz:

set(lgd,'Location','BestOutside')