Matlab水平条形图创建函数barh教程

4
(4)

今天,带来Matlab中绘制离散数据的水平条形图函数barh的使用方法。本文注意介绍barh函数在Matlab中的常见用法、语法说明、显示一个条形序列、显示具有轴标签和图例的四个条形序列、更改基准值、显示具有负数据的堆叠条形、自定义垂直轴刻度标签、指定分类数据、在条形末端添加标签、指定条形宽度和颜色、自定义一个条形序列以及比较不同的条形样式等用法。

Matlab水平条形图创建函数barh教程

下面我们将开始非常详细的 Matlab barh 函数语法介绍,实例引用,结果展示。首先,我们给出 Matlab 中关于 barh 函数的帮助文本如下:

>> help barh
 barh Horizontal bar graph.
    barh(X,Y) draws the columns of the M-by-N matrix Y as M groups of
    N horizontal bars. The vector X must not have duplicate values.
 
    barh(Y) uses the default value of X=1:M.  For vector inputs,
    barh(X,Y) or barh(Y) draws LENGTH(Y) bars.  The colors are set by
    the colormap.
 
    barh(X,Y,WIDTH) or barh(Y,WIDTH) specifies the width of the
    bars. Values of WIDTH > 1, produce overlapped bars.  The
    default value is WIDTH=0.8.
 
    barh(...,'grouped') produces the default horizontal grouped bar chart.
    barh(...,'stacked') produces a horizontal stacked bar chart.
    barh(...,LINESPEC) uses the line color specified (one of 'rgbymckw').
 
    barh(AX,...) plots into AX instead of GCA.
 
    H = barh(...) returns a vector of handles to barseries objects.
 
    Use SHADING FACETED to put edges on the bars.  Use SHADING FLAT to
    turn them off.
 
    Examples: subplot(3,1,1), barh(rand(10,5),'stacked'), colormap(cool)
              subplot(3,1,2), barh(0:.25:1,rand(5),1)
              subplot(3,1,3), barh(rand(2,3),.75,'grouped')

常见用法

barh(y)
barh(x,y)
barh(___,width)
barh(___,style)
barh(___,color)
barh(___,Name,Value)
barh(ax,___)
b = barh(___)

语法说明

barh(y) 创建一个水平条形图,每个条形对应 y 中一个元素。如果 y 是 m×n 矩阵,则 barh 创建每组包含 n 个条形的 m 个组。

barh(x,y) 沿垂直轴在 x 指定的位置绘制条形。

barh(___,width) 指定每个条形占用的可用空间比例。例如,barh(y,1) 让每组中的条形紧挨在一起。将 width 指定为上述任一语法中的最后一个参数。

barh(___,style) 指定条形组的样式。例如,barh(y,’stacked’) 将每组中的条形堆叠成一个多色条形。

barh(___,color) 为所有条形指定单一颜色。例如,barh(y,’red’) 显示红色条形。

barh(___,Name,Value) 使用一个或多个名称-值对组参数指定条形图的属性。仅使用默认 ‘grouped’ 或 ‘stacked’ 样式的条形图支持设置条形属性。在所有其他输入参数之后指定名称-值对组参数。

barh(ax,___) 在目标坐标区中显示条形图。将坐标区指定为上述任一语法中的第一个参数。

b = barh(___) 返回一个或多个 Bar 对象。如果 y 是向量,则 barh 返回一个 Bar 对象。如果 y 是矩阵,则 barh 为每个序列返回一个 Bar 对象。显示条形图后,使用 b 设置条形的属性。

显示一个条形序列

创建一个包含四个值的向量。在一个条形图中显示这些值,每个水平条形对应一个值。

y = [10 20 30 41];
barh(y)
Matlab水平条形图创建函数barh教程

显示具有轴标签和图例的四个条形序列

将 x 定义为一个包含三个年份值的矩阵。将 y 定义为包含四个城市的降雪数据的矩阵。在每年的组中显示四个条形序列。然后添加轴标签和图例。

x = [1980 1990 2000];
y = [40 50 63 52; 42 55 50 48; 30 20 44 40];
barh(x,y)
xlabel('Snowfall')
ylabel('Year')
legend({'Springfield','Fairview','Bristol','Jamesville'})
Matlab水平条形图创建函数barh教程

更改基准值

创建矩阵 y。然后在条形图中以 25 为基准值显示 y 值。小于 25 的值显示在基线的左侧。

y = [8 15 33; 30 35 40; 50 55 62];
barh(y,'BaseValue',25)
Matlab水平条形图创建函数barh教程

显示具有负数据的堆叠条形

将 x 定义为一个包含三个年份值的向量。将 y 定义为包含负值和正值组合的矩阵。在堆叠水平条形图中显示值。

x = [1980 1990 2000];
y = [15 20 -5; 10 -17 21; -10 5 15];
barh(x,y,'stacked')
Matlab水平条形图创建函数barh教程

自定义垂直轴刻度标签

将 y 定义为包含四个值的向量,并在水平条形图中显示值。然后调用 yticklabels 函数来更改垂直轴上的刻度标签。

y = [10 20 30 41];
barh(y)
yticklabels({'April','May','June','July'})

Matlab2016中不支持yticklabels函数,其官方运行结果如下:

Matlab水平条形图创建函数barh教程

指定分类数据

指示条形图类别的一种方法是将 X 指定为分类数组。barh 函数使用经过排序的类别列表,因此条形的显示顺序可能与您预期的有所不同。为了保留顺序,请调用 reordercats 函数。

将 X 定义为分类数组,并调用 reordercats 函数来指定条形的顺序。然后将 Y 定义为条形长度的向量,并显示条形图。

X = categorical({'Small','Medium','Large','Extra Large'});
X = reordercats(X,{'Small','Medium','Large','Extra Large'});
Y = [10 21 33 52];
barh(X,Y)

Matlab2016中,不支持reordercats函数,其官方运行结果如下:

Matlab水平条形图创建函数barh教程

在条形末端添加标签

将 vals 定义为包含两个数据序列的矩阵。在水平条形图中显示数据,并指定输出参数。由于有两个序列,barh 返回包含两个 Bar 对象的向量。

x = [1 2 3];
vals = [2 3 6; 11 23 26];
b = barh(x,vals);

在Matlab2016中,要求x与vals的行数相同,因此无法在Matalb2016中运行:官方运行结果如下:

Matlab水平条形图创建函数barh教程

在第一个条形序列的末端将值作为标签显示。要实现此目的,请通过获取第一个 Bar 对象的 XEndPoints 和 YEndPoints 属性来获取条形末端的坐标。由于水平条形图具有经过旋转的坐标区,因此在将 XEndPoints 和 YEndPoints 的值传递给 text 函数之前,您必须对它们进行切换。将填充值 0.3 添加到 YEndpoints 中,使文本不会紧挨条形的边。然后调用 text 函数以显示标签。

xtips1 = b(1).YEndPoints + 0.3;
ytips1 = b(1).XEndPoints;
labels1 = string(b(1).YData);
text(xtips1,ytips1,labels1,'VerticalAlignment','middle')
Matlab水平条形图创建函数barh教程

接下来,按照相同的步骤,在第二个条形序列的末端显示标签。

xtips2 = b(2).YEndPoints + 0.3;
ytips2 = b(2).XEndPoints;
labels2 = string(b(2).YData);
text(xtips2,ytips2,labels2,'VerticalAlignment','middle')
Matlab水平条形图创建函数barh教程

指定条形宽度和颜色

创建数据并在水平条形图中显示数据,该条形图中条形的宽度为 0.4,颜色为红色。

y = [10 22 30 42];
width = 0.4;
barh(y,width,'red');
Matlab水平条形图创建函数barh教程

自定义一个条形序列

创建矩阵 y,其中每列为一个数据序列。然后在条形图中显示数据,指定在调用 barh 函数时的输出参数。在本例中,barh 返回包含三个 Bar 对象的向量。每个对象对应于一个不同序列。

y = [10 15 20; 30 35 40; 50 55 62];
b = barh(y);
Matlab水平条形图创建函数barh教程

将第二个条形序列改为绿色,并使用加粗的红边。

b(2).FaceColor = [.2 .6 .5];
b(2).EdgeColor = [.63 .08 .18];
b(2).LineWidth = 2;
Matlab水平条形图创建函数barh教程

比较不同的条形样式

创建数据,并使用使用默认的 ‘grouped’ 样式和 ‘stacked’ 样式在两个不同的条形图中显示数据。

x = [1980 1990 2000];
y = [8 15 25; 30 35 40; 50 55 62];
% Grouped
tiledlayout(2,1);
ax1 = nexttile;
barh(ax1,x,y)
title('Grouped Style')
% Stacked
ax2 = nexttile;
barh(ax2,x,y,'stacked')
title('Stacked Style')

Matlab2016中,不支持tiledlayout以及nexttile函数,因此我们用subplot函数来分区域显示图形,代码如下:

x = [1980 1990 2000];
y = [8 15 25; 30 35 40; 50 55 62];
% Grouped
subplot(2,1,1)
barh(x,y)
title('Grouped Style')
% Stacked
subplot(2,1,2)
barh(x,y,'stacked')
title('Stacked Style')
Matlab水平条形图创建函数barh教程

共计4人评分,平均4

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/articles/975.html

(1)
微信公众号
古哥的头像古哥管理团队
上一篇 2020年11月28日 19:23
下一篇 2020年11月30日 21:43

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号