在MATLAB中对条形图进行排序

3

我有一条条形图中的数据:

现在我想按升序或降序排序,请问有人可以告诉我如何实现吗?

谢谢!

祝好, Marko


你是如何绘制数据的?在创建图表之前不能先将其排序吗? - 3lectrologos
请发布您用于创建barh图的代码,以便我们能够提供更好的答案。 - Shai
1个回答

4
在Matlab中,排序(以及所有数据操作)都是在生成图形之前处理的。一旦它被呈现出来,你所能做的最多就是改变它的外观。
根据您提供的图像推测,我不知道您(生物信息学?)数据集的具体细节,但我的猜测是您有一些向量"data",然后是一个包含字符串"labels"的单元数组。
要获得条形图,我们需要:
1. 对数据向量进行排序; 2. 重新排列单元格数组以反映新序列; 3. 使用barh()函数; 4. (可选)更改barh图的排序顺序。
在Matlab中,跟踪默认排序顺序非常重要:
- barh函数按照向量在降序(即较高索引的元素先出现)下的索引来绘制条形图; - sort函数按照向量的升序值来排序。
以下是一个简化的示例:
data = [35.42, 32.9, 36.8];
labels = { 'FOO_fastqc', 'BAR_fastqc', 'BAZ_fastqc'};

% Sort the Data & Rearrange Labels
[sorted_data, new_indices] = sort(data); % sorts in *ascending* order
sorted_labels = labels(new_indices); 

% Plot in Descending Order
figure();
barh(sorted_data);
set(gca,'YTickLabel',sorted_labels);

% Plot in Ascending Order
figure();
barh(sorted_data);
set(gca,'YTickLabel',sorted_labels);
set(gca,'YDir','reverse'); % Flips the Y Axis


对于那些需要显示大量标签的人...而且你想要全部显示,是吗?这个方法可以解决问题:set(gca,'YTick',1:numel(sorted_labels),'YTickLabel',sorted_labels) - Rolando Gonzales

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接