Chcę uzyskać figurę Matlaba za pomocą funkcji bar, ale gdy wykreślona jest rzeczywista liczba, zamiast wyświetlać liczby pod każdym słupkiem, który chcę wyświetlić, który reprezentuje tę rzeczywistą wykreśloną wartość.

Na przykład mam wektor x = [1 2 3] i zamiast pokazywać 1, 2 i 3 pod każdym wykreślonym słupkiem, chcę wyświetlić ciąg odpowiadający jednej z tych wartości y = {'sam'; 'alan'; 'ellie'}

enter image description here

Czy mógłbyś wyjaśnić, jak mogę to uzyskać?

18
Simon 18 czerwiec 2011, 20:08

2 odpowiedzi

Najlepsza odpowiedź
x = [1 2 3];
str = {'sam'; 'alan'; 'ellie'};
bar(x)
set(gca, 'XTickLabel',str, 'XTick',1:numel(str))

enter image description here

23
Amro 19 grudzień 2012, 23:31
Korzystanie z rozwiązania platinummonkey, w tym „XTick”, 1:4 (lub 1:numel(Labels)) okazało się dla mnie bardziej niezawodne niż użycie samego „XTickLable”. Pominięcie „XTick” powodowało w niektórych przypadkach przemieszczenie etykiet.
 – 
Jacob
19 grudzień 2012, 15:13
@Jacob: jasne, nie zaszkodzi również określić XTick. Jestem jednak ciekaw, czy masz przykład, w którym etykiety są niewłaściwie umieszczone?
 – 
Amro
19 grudzień 2012, 17:01
Np. postać(); trzymać się; bar([10 22 2 11]); Etykieta={'#7','#8','#9','#10'}; set(gca, 'XTickLabel', Etykieta); wstrzymaj się
 – 
Jacob
19 grudzień 2012, 21:37
Działa, jeśli to zrobisz: figure(); trzymać się; bar([10 22 2 11]); Etykieta={'#7','#8','#9','#10'}; set(gca,'XTick',1:numel(Etykieta), 'XTickLabel', Etykieta); wstrzymaj się
 – 
Jacob
19 grudzień 2012, 21:53
@Jacob: ach widzę, dobry przykład. Wykonuj kod pojedynczo, a dowiesz się, że przyczyną problemu jest hold on; tworzy oś z domyślnymi znacznikami, a po dodaniu do niej wykresu słupkowego najwyraźniej stara się utrzymać tę samą liczbę znaczników. W tym momencie niestandardowe etykiety są stosowane rotacyjnie (ponownie używane), ponieważ teraz masz więcej znaczników niż odpowiadające im etykiety. Aktualizuję swoją odpowiedź, dzięki Jacob.
 – 
Amro
19 grudzień 2012, 23:28

http://www.mathworks.com/matlabcentral/newsreader/view_thread/21178

Labels = {'a', 'b', 'c', 'd'};
set(gca, 'XTick', 1:4, 'XTickLabel', Labels);

Jeśli chcesz zmienić etykiety Y, zastąp YTickLabel XTickLabel

6
Jonas 19 czerwiec 2011, 00:08