如何直接从 table 列出的数据制作带有 x 标签和图例的条形图

How to make a bar chart, with x-labels and legend, directly from a table of listed data

我有一个数据 table tb 看起来像这样,我想把它变成条形图。

N         X       P   
________  ______  ______

0          5      15.314   
0         10      36.288   
0         13      7.1785   
1          5      18.182   
1         10      40.997   
1         13      8.9741   
2          5       17.65   
2         10      40.095   
2         13       9.276

我希望条形图看起来像这样,但不需要重新排列 table。最简单的方法是什么?

目前,我的代码看起来像这样,但我希望应该有更简单的方法来操作它:

y = [tb.P(tb.X==5)' ; tb.P(tb.X==10)' ; tb.P(tb.X==13)'];
b = bar(y);
xlab = arrayfun(@num2str, Xlist, 'uniformoutput', false);
set(gca,'xticklabel',xlab);
leg = arrayfun(@num2str, Nlist, 'uniformoutput', false);;
legend(b,leg)

执行此操作的正确方法是什么?

不知道对你来说是不是更简单,不过你也可以这样做:

dat = sortrows(tb,[2 1]);
y = reshape(dat.P,numel(unique(dat.X)),[]).';
b = bar(y);
set(gca,'xticklabel',unique(dat.X));
legend(b,num2str(unique(dat.N)))

如果您有 Matlab 2017a,您还可以将 this example 与分类数据一起使用,以设置调用 bar.

的 x 轴值

您可以使用 unique and accumarray 更轻松地做到这一点:

[nValues, ~, nIndex] = unique(tb.N);
[xValues, ~, xIndex] = unique(tb.X);
bar(accumarray([xIndex nIndex], tb.P));
set(gca, 'XTickLabel', xValues);
legend(int2str(nValues));