我有以下示例数据:
names = ["JFK", "BOS", "YYZ", "LAX"];
values = [1, 2, 2, 3];
我创建创建一个categorical
数组:
>> cat = categorical(names)
cat =
1×4 categorical array
JFK BOS YYZ LAX
然后用数据创建水平条形图:
barh(cat, values);
这是输出的样子:
如您所见,条形图的y轴按字母顺序自动排序,但我想改为根据值对条形图进行排序。值最大的类别位于图的顶部,值最小的类别位于图的底部,如下所示:
LAX -| XXXXXXXXX
YYZ -| XXXXXX
BOS -| XXXXXX
JFK -| XXX
我该怎么做?
的文档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)
按预期工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句