Main Content

控制分类直方图的显示

此示例说明如何使用 histogram 有效查看分类数据。可以使用名称-值对组 'NumDisplayBins''DisplayOrder''ShowOthers' 更改分类直方图的显示。这些选项有助于您更好地整理数据和减少绘图中的噪点。

创建分类直方图

示例文件 outages.csv 包含表示美国电力中断情况的数据。该文件包含六个列:RegionOutageTimeLossCustomersRestorationTimeCause

以表的形式读取 outages.csv 文件。使用 'Format' 选项指定每列包含的数据类型:分类 ('%C')、浮点数 ('%f') 或日期时间 ('%D')。对数据的前几行进行索引以查看变量。

data_formats = '%C%D%f%f%D%C';
C = readtable('outages.csv','Format',data_formats);
first_few_rows = C(1:10,:)
first_few_rows=10×6 table
     Region         OutageTime        Loss     Customers     RestorationTime          Cause     
    _________    ________________    ______    __________    ________________    _______________

    SouthWest    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    winter storm   
    SouthEast    2003-01-23 00:49    530.14    2.1204e+05                 NaT    winter storm   
    SouthEast    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    winter storm   
    West         2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    equipment fault
    MidWest      2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    severe storm   
    West         2003-06-18 02:49         0             0    2003-06-18 10:54    attack         
    West         2004-06-20 14:39    231.29           NaN    2004-06-20 19:16    equipment fault
    West         2002-06-06 19:28    311.86           NaN    2002-06-07 00:51    equipment fault
    NorthEast    2003-07-16 16:23    239.93         49434    2003-07-17 01:12    fire           
    MidWest      2004-09-27 11:09    286.72         66104    2004-09-27 16:37    equipment fault

绘制 Cause 变量的分类直方图。指定一个输出参量以返回直方图对象的句柄。

h = histogram(C.Cause);
xlabel('Cause of Outage')
ylabel('Frequency')
title('Most Common Power Outage Causes')

Figure contains an axes object. The axes object with title Most Common Power Outage Causes, xlabel Cause of Outage, ylabel Frequency contains an object of type categoricalhistogram.

将直方图的归一化方式更改为使用 'probability' 归一化,它显示每种断电原因的相对频率。

h.Normalization = 'probability';
ylabel('Relative Frequency')

Figure contains an axes object. The axes object with title Most Common Power Outage Causes, xlabel Cause of Outage, ylabel Relative Frequency contains an object of type categoricalhistogram.

更改显示顺序

使用 'DisplayOrder' 选项按从大到小的顺序对 bin 排序。

h.DisplayOrder = 'descend';

Figure contains an axes object. The axes object with title Most Common Power Outage Causes, xlabel Cause of Outage, ylabel Relative Frequency contains an object of type categoricalhistogram.

截断显示的条形数

使用 'NumDisplayBins' 选项仅在绘图中显示三个条形。由于对未显示的数据仍考虑了归一化,因此所显示的概率相加不再为 1。

h.NumDisplayBins = 3;

Figure contains an axes object. The axes object with title Most Common Power Outage Causes, xlabel Cause of Outage, ylabel Relative Frequency contains an object of type categoricalhistogram.

将被排除的数据相加

使用 'ShowOthers' 选项合并显示所有被排除的条形,以使所显示的概率相加后再次等于 1。

h.ShowOthers = 'on';

Figure contains an axes object. The axes object with title Most Common Power Outage Causes, xlabel Cause of Outage, ylabel Relative Frequency contains an object of type categoricalhistogram.

限制只对显示数据进行归一化

在 R2017a 之前的版本中,histogramhistcounts 函数仅使用经过 bin 处理的数据来计算归一化。这种行为意味着如果部分数据最终位于 bin 外面,则在归一化时会被忽略。但在 MATLAB® R2017a 中,该行为改为始终使用输入数据中的总元素数目来进行归一化。这种新行为更为直观,但如果您更愿意采用旧行为,则需要采取几个特殊步骤来限制仅对经过分 bin 处理的数据进行归一化。

您可以限制只对直方图中显示的数据实施概率归一化,而不是对所有输入数据均进行归一化。只需更新直方图对象的 Data 属性,删除其他类别即可。Categories 属性将反映直方图中显示的类别。使用 setdiff 比较这两个属性值,并从 Data 中删除不在 Categories 中的所有类别。然后从数据中删除得到的所有 undefined 分类元素,仅保留所显示类别中的元素。

h.ShowOthers = 'off';
cats_to_remove = setdiff(categories(h.Data),h.Categories);
h.Data = removecats(h.Data,cats_to_remove);
h.Data = rmmissing(h.Data);

Figure contains an axes object. The axes object with title Most Common Power Outage Causes, xlabel Cause of Outage, ylabel Relative Frequency contains an object of type categoricalhistogram.

归一化处理现在仅基于剩余的三个类别,因此这三个条形相加等于 1。

另请参阅

| |