今天,带来Matlab中绘制离散数据的条形图函数bar的使用方法。本文注意介绍bar函数在Matlab中的常见用法、语法说明、条形图的创建、条形位置的指定、条形宽度的指定、条形组图的绘制、堆叠条形图的绘制、负数据堆叠条形图绘制、分类数据的指定、条形末端显示标签、条形图指定坐标区、条形颜色的修改、条形和轮廓颜色的修改、单个条形颜色修改、使用颜色图修改条形图的颜色以及自定义分组或堆叠条形中的一个序列等。
下面我们将开始非常详细的 Matlab bar 函数语法介绍,实例引用,结果展示。首先,我们给出 Matlab 中关于 bar 函数的帮助文本如下:
>> help bar
bar Bar graph.
bar(X,Y) draws the columns of the M-by-N matrix Y as M groups of N
vertical bars. The vector X must not have duplicate values.
bar(Y) uses the default value of X=1:M. For vector inputs, bar(X,Y)
or bar(Y) draws LENGTH(Y) bars. The colors are set by the colormap.
bar(X,Y,WIDTH) or bar(Y,WIDTH) specifies the width of the bars. Values
of WIDTH > 1, produce overlapped bars. The default value is WIDTH=0.8
bar(...,'grouped') produces the default vertical grouped bar chart.
bar(...,'stacked') produces a vertical stacked bar chart.
bar(...,LINESPEC) uses the line color specified (one of 'rgbymckw').
bar(AX,...) plots into AX instead of GCA.
H = bar(...) 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), bar(rand(10,5),'stacked'), colormap(cool)
subplot(3,1,2), bar(0:.25:1,rand(5),1)
subplot(3,1,3), bar(rand(2,3),.75,'grouped')
常见用法
bar(y)
bar(x,y)
bar(___,width)
bar(___,style)
bar(___,color)
bar(___,Name,Value)
bar(ax,___)
b = bar(___)
语法说明
bar(y) 创建一个条形图,y 中的每个元素对应一个条形。如果 y 是 m×n 矩阵,则 bar 创建每组包含 n 个条形的 m 个组。
bar(x,y) 在 x 指定的位置绘制条形。
bar(___,width) 设置条形的相对宽度以控制组中各个条形的间隔。将 width 指定为标量值。可以将此选项与前面语法中的任何输入参数组合一起使用。
bar(___,style) 指定条形组的样式。例如,使用 ‘stacked’ 将每个组显示为一个多种颜色的条形。
bar(___,color) 设置所有条形的颜色。例如,使用 ‘r’ 表示红色条形。
bar(___,Name,Value) 使用一个或多个名称-值对组参数指定条形图的属性。仅使用默认 ‘grouped’ 或 ‘stacked’ 样式的条形图支持设置条形属性。在所有其他输入参数之后指定名称-值对组参数。
bar(ax,___) 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区 (gca) 中。选项 ax 可以位于前面的语法中的任何输入参数组合之前。
b = bar(___) 返回一个或多个 Bar 对象。如果 y 是向量,则 bar 将创建一个 Bar 对象。如果 y 是矩阵,则 bar 为每个序列返回一个 Bar 对象。显示条形图后,使用 b 设置条形的属性。
条形图的创建
y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
bar(y)
条形位置的指定
指定沿 x 轴的条形位置。
x = 1900:10:2000;
y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
bar(x,y)
条形宽度的指定
将各条形的宽度设置为各条形可用总空间的 40%。
y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
bar(y,0.4)
条形组图的绘制
显示四个条形组,每一组包含三个条形。
y = [2 2 3; 2 5 6; 2 8 9; 2 11 12];
bar(y)
堆叠条形图的绘制
为矩阵中的每一行显示一个条形。每个条形的高度是行中各元素之和。
y = [2 2 3; 2 5 6; 2 8 9; 2 11 12];
bar(y,'stacked')
负数据堆叠条形图绘制
将 x 定义为一个包含三个年份值的向量。将 y 定义为包含负值和正值组合的矩阵。在条形图中显示这些值。
x = [1980 1990 2000];
y = [15 20 -5; 10 -17 21; -10 5 15];
bar(x,y,'stacked')
分类数据的指定
指示条形图类别的一种方法是将 X 指定为分类数组。bar 函数使用经过排序的类别列表,因此条形的显示顺序可能与您预期的有所不同。要保留顺序,请调用 reordercats 函数。
将 X 定义为分类数组,并调用 reordercats 函数来指定条形的顺序。然后将 Y 定义为条形高度向量,并显示条形图。
X = categorical({'Small','Medium','Large','Extra Large'});
X = reordercats(X,{'Small','Medium','Large','Extra Large'});
Y = [10 21 33 52];
bar(X,Y)
条形末端显示标签
将 vals 定义为一个包含两个数据集的值的矩阵。在条形图中显示值,并指定输出参数。由于有两个数据集,bar 返回包含两个 Bar 对象的向量。
整个这一段,我的Matalb 2016版本不支持这种写法,所以关于标签显示,我直接从官方拿结果吧:
x = [1 2 3];
vals = [2 3 6; 11 23 26];
b = bar(x,vals);
在第一个条形序列的末端显示值。通过获取第一个 Bar 对象的 XEndPoints 和 YEndPoints 属性,获取条形末端的坐标。将这些坐标传递给 text 函数,并指定垂直和水平对齐方式,让值显示在条形末端上方居中处。
xtips1 = b(1).XEndPoints;
ytips1 = b(1).YEndPoints;
labels1 = string(b(1).YData);
text(xtips1,ytips1,labels1,'HorizontalAlignment','center',...
'VerticalAlignment','bottom')
接下来,在第二个条形序列的末端上方显示值。
xtips2 = b(2).XEndPoints;
ytips2 = b(2).YEndPoints;
labels2 = string(b(2).YData);
text(xtips2,ytips2,labels2,'HorizontalAlignment','center',...
'VerticalAlignment','bottom')
条形图指定坐标区
从 R2019b 开始,您可以使用 tiledlayout 和 nexttile 函数显示分块条形图。调用 tiledlayout 函数以创建一个 2×1 平铺图布局。调用 nexttile 函数以创建坐标区对象 ax1 和 ax2。在顶部坐标区中显示条形图。在底部坐标区中,显示相同数据的堆叠条形图。
y = [1 2 3; 4 5 6];
tiledlayout(2,1)
% Top bar graph
ax1 = nexttile;
bar(ax1,y)
% Bottom bar graph
ax2 = nexttile;
bar(ax2,y,'stacked')
以上tiledlayout和nexttile函数在Matlab2016中不支持,所以我这里用subplot函数实现该功能,代码如下:
y = [1 2 3; 4 5 6];
subplot(2,1,1)
bar(y)
subplot(2,1,2)
bar(y,'stacked')
条形颜色的修改
使用红色条形创建一个条形图。
y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
bar(y,'r')
条形和轮廓颜色的修改
使用 RGB 三元组设置条形内部颜色和轮廓颜色。设置条形轮廓的宽度。
y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
bar(y,'FaceColor',[0 .5 .5],'EdgeColor',[0 .9 .9],'LineWidth',1.5)
单个条形颜色修改
可以使用 Bar 对象的 CData 属性控制单个条形的颜色。
创建一个条形图并将 Bar 对象赋给一个变量。将 Bar 对象的 FaceColor 属性设置为 ‘flat’,从而使条形图使用 CData 属性中定义的颜色。默认情况下,CData 属性预先填充由默认 RGB 颜色值组成的矩阵。要更改特定的颜色,请更改矩阵中的对应行。例如,更改第二个条形的颜色。
b = bar(rand(10,1));
b.FaceColor = 'flat';
b.CData(2,:) = [.5 0 .5];
我这里无法使用CData参数,官方输出结果如下:
使用颜色图修改条形图的颜色
通过将 FaceColor 属性设置为 ‘flat’,创建一个使用颜色图颜色的条形图。然后将每个 Bar 对象的 CData 属性设置为一个整数。
y = [1 3 5; 3 2 7; 3 4 2];
b = bar(y,'FaceColor','flat');
for k = 1:size(y,2)
b(k).CData = k;
end
同样的,我这里没有CData参数,官方结果如下:
自定义分组或堆叠条形中的一个序列
创建矩阵 y,其中每列为一个数据序列。调用 bar 函数以在条形图中显示数据,并指定输出参数。输出是包含三个 Bar 对象的向量,其中每个对象对应一个不同序列。无论条形是分组还是堆叠,均为如此。
y = [10 15 20; 30 35 40; 50 55 62];
b = bar(y);
将第三个条形序列设置为绿色。
b(3).FaceColor = [.2 .6 .5];
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/931.html