【问题标题】:Histogram of labeled strings in matlabmatlab中标记字符串的直方图
【发布时间】:2016-12-22 19:02:39
【问题描述】:

我有一个数组,其中包含来自调查的一些字符串作为结果。我必须在直方图中对它们进行建模并显示选择值的次数。

到目前为止,我所做的是将数据插入到 Octave 中。就像下面这样;

airlines = {'Turkish Airlines','Turkish Airlines','Anadolu Jet','Turkish Airlines','Onur Air','Anadolu Jet','Turkish Airlines','Turkish Airlines','Anadolu Jet' ,'Turkish Airlines','Turkish Airlines','Turkish Airlines','Turkish Airlines','Turkish Airlines','Turkish Airlines','Turkish Airlines','Pegasus Airlines','Turkish Airlines','Atlas Global' ,'Anadolu Jet','Turkish Airlines','Pegasus Airlines','Turkish Airlines','Anadolu Jet','Pegasus Airlines','Turkish Airlines','Onur Air','Anadolu Jet','Turkish Airlines' ,'飞马航空','土耳其航空','Onur Air','Anadolu Jet','土耳其航空','土耳其航空','土耳其航空','汉莎航空','达美航空','土耳其航空',' Anadolu Jet'、'Turkish Airlines'、'Anadolu Jet'、'Onur Air'、'Atlas Global'、'Lufthansa'、'Turkish Airlines'、'Onur Air'、'Pegasus Airlines'、'Turkish Airlines'、'Anadolu Jet','Turkish Airlines','Pegasus Airlines','Turkish Airlines','Anadolu Jet','Turkish Airlines','Turkish Airlines'};

我还创建了一个包含所有航空公司名称的标签列表。也跟下面一样;

labels={'Turkish Airlines','Onur Air','Anadolu Jet','Pegasus Airlines','Lufthansa','Atlas Global','Delta'};

我想用数组中每个字符串的每次出现次数来创建图片中的直方图。到目前为止,我尝试使用 hist、histogram 和 set 函数,但它们不起作用。这里不支持 Matlab 的一些功能,老实说,我很挣扎。提前一点帮助会很好。从现在开始感谢!

【问题讨论】:

  • 你尝试了什么,什么“没有用”?见:minimal reproducible example
  • 例如,我尝试将变量引入为名义变量以使用箱线图绘制它们,但它通过指示函数不包含在库中而无法识别函数。那是我解决问题的尝试:)
  • 请发布代码而不是代码图像。还将代码格式化为代码,而不是引用块。

标签: matlab histogram octave


【解决方案1】:

看看uniq_c.m

1;
function [val, cnt] = uniq_c (X)
  [val, ~, J] = unique (X);
  cnt = accumarray (J(:), 1);
  if (rows (J) == 1)
    cnt = cnt';
  endif
endfunction

airlines = {'Turkish Airlines','Turkish Airlines','Anadolu Jet','Turkish Airlines','Onur Air','Anadolu Jet','Turkish Airlines','Turkish Airlines', 'Anadolu Jet','Turkish Airlines','Turkish Airlines','Turkish Airlines','Turkish Airlines','Turkish Airlines','Turkish Airlines','Turkish Airlines','Pegasus Airlines','Turkish Airlines','Atlas Global','Anadolu Jet','Turkish Airlines','Pegasus Airlines','Turkish Airlines', 'Anadolu Jet','Pegasus Airlines', 'Turkish Airlines', 'Onur Air', 'Anadolu Jet','Turkish Airlines','Pegasus Airlines', 'Turkish Airlines','Onur Air','Anadolu Jet','Turkish Airlines','Turkish Airlines','Turkish Airlines','Lufthansa','Delta','Turkish Airlines','Anadolu Jet','Turkish Airlines', 'Anadolu Jet','Onur Air','Atlas Global','Lufthansa','Turkish Airlines','Onur Air','Pegasus Airlines','Turkish Airlines','Anadolu Jet','Turkish Airlines','Pegasus Airlines','Turkish Airlines','Anadolu Jet','Turkish Airlines','Turkish Airlines'};

[labels, count] = uniq_c (airlines)

给出答案:

labels = 
{
  [1,1] = Anadolu Jet
  [1,2] = Atlas Global
  [1,3] = Delta
  [1,4] = Lufthansa
  [1,5] = Onur Air
  [1,6] = Pegasus Airlines
  [1,7] = Turkish Airlines
}
count =

   11    2    1    2    5    6   29

终于画好了

bar (count)
set (gca, "xticklabel", labels)

给予:

【讨论】:

  • 这行得通,但是,我得到的不是字符串,而是从 1 到 7 的数字作为标签。有什么问题?你也在用八度吗?
  • 你也可以用uniq_c代替[labels,~,id] = unique(airlines); count = sum(bsxfun(@eq, id(:), 1:max(id)),1);
猜你喜欢
  • 2017-10-09
  • 1970-01-01
  • 2015-11-05
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
相关资源
最近更新 更多