如何直接从 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));
我有一个数据 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
.
您可以使用 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));