Документация barh
действительно говорит (курсив добавлен)
По умолчанию , категории отображаются в алфавитном порядке.
Однако я не нашел опции ввода для переопределения этого поведения по умолчанию.
Обходной путь выглядит следующим образом:
- Применить
sort
кзначения и получить второй вывод этой функции.Здесь указывается, какой порядок следует применить к cat
. - . Постройте значения без указания категориальных данных в качестве первого ввода.
- Измените отметки оси на названия категорий.Вы можете использовать
string
для преобразования категорий в названия категорий (после применения соответствующего порядка).
То есть:
[values_sorted, ind_sort] = sort(values); % step 1
barh(values_sorted) % step 2
set(gca, 'yticklabel', string(cat(ind_sort))) % step 3
Другой подход, как уже упоминалосьв комментариях, это создать категориальный массив с соответствующим порядком, встроенным в него. Видимо это можно сделать следующим образом (не знаю, как это работает):
names = ["JFK", "BOS", "YYZ", "LAX"];
values = [1, 2, 2, 3];
[~, ind_sort] = sort(values);
names_char = cellfun(@char, names, 'UniformOutput', false);
cat = categorical(ind_sort, ind_sort, names_char);
Так что теперь
barh(cat, values)
работает как задумано.