我有一个分类数组,种族和一个是/否数组,我想以某种方式创建一个堆叠的条形图/直方图,其中每个种族都有自己的条形图,每个条形图分为两种不同的颜色-一种用于受访者说是的,其他人说不。有没有办法在MATLAB中相对简单地做到这一点?至少有一种方法可以创建一张表格来显示每个种族,有多少人说是,有多少人说不?
为了澄清,我的数据集中有1250行,每一行代表一个人的响应。我将其拆分,因此有一个称为YESNO
1250x1标称值的标称数组。它具有Y
或N
。我也有一个称为的标称数组RACE
,它是1250x1,并选择了5种不同的种族。
我想以某种方式制作一个像这样的直方图,它是在Tableau中制作的(“是”是橙色,蓝色是“否”):
如果我做不到这一点,那么我至少希望有一个表格可以显示每个种族,然后显示多少人回答“是”,多少人回答“否”。
我尝试执行以下操作:
bar(RACE,YESNO)
而且我知道XData值必须唯一。
因此,我尝试对数据进行直方图处理:
histogram(RACE,YESNO)
我得到的东西看起来像这样:
这根本不是我想要的。我一直在寻找所有文档,以查看是否有一种方法可以使用此分类数据绘制堆叠的条形图,或者至少可以构建堆叠的直方图,但是似乎没有任何方法可以向我指出正确的方向。对于分类数据的堆叠直方图,我找不到任何内容,bar
也不允许我使用当前数据进行建模。
另外,我愿意使用MATLAB中包含的医院数据集来查看示例。可以通过类似的方式绘制性别列来反对吸烟。
在MATLAB中有没有解决的办法?
假设您的数据如下所示:
yesno = categorical(randi(2,1250,1),[1 2],{'no','yes'});
race = categorical(randi(5,1250,1),1:5,{'Asian','Black','BHispanic','White','WHispanic'});
您可以执行以下操作:
% convert everything to numeric:
yn = double(yesno);
rac = double(race);
% caluculate all frequencies:
data = accumarray([rac yn],1);
% get the categories names:
races = categories(race);
answers = categories(yesno);
% plotting:
bar(data,0.4,'stacked');
ax = gca;
ax.XTickLabel = races; % set the x-axis ticks to the race names
legend(answers) % add a legend for the colors
colormap(lines(3)) % use nicer colors (close to your example)
ylabel('YES/NO')% set the y-axis lable
% some other minor fixes:
box off
ax.YGrid = 'on';
结果:
您可以使用以下方法制作一张桌子:
T = array2table(data.','VariableNames',races,'RowNames',answers)
输出:
T =
Asian Black BHispanic White WHispanic
_____ _____ _________ _____ _________
no 126 123 102 128 144
yes 145 126 128 105 123
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句