一、二维图
1、格式
plot(x)——缺省自变量绘图格式
plot(x,y)——以y(x)的函数关系作图。
如果y是n*m的矩阵,则x为自变量,作出m条曲线。
plot(x1,y1,x2,y2,…,xn,yn)——多条曲线绘图格式
plot(x1,y1,选项1,x2,y2,选项2,…,xn,yn,选项n)——含选项的绘图格式
2、图形的辅助标注和窗口的分割
title(图形说明)
xlabel(x轴说明)
ylabel(y轴说明)
text(
x
,y
,txt
)——在点(x,y)处添加文字说明
legend(图例一,图例二,…)
subplot(m,n,p)——将绘图区域分割成m*n个子区域,并按照行 从左至右,从上至下 依次编号。p表示第p个绘图子区域。
注意:如果是要两个图画到同一个坐标里面,则在两个plot函数之间添加一行hold on
3、绘图参数
4、条形图
bar(y)
创建一个条形图,y
中的每个元素对应一个条形。
如果y是 m×n 矩阵,则bar创建每组包含 n 个条形的 m个组。
bar(x,y)
在x
指定的位置绘制条形。x为单增向量。
bar(**___**,width)
设置条形的相对宽度和控制在一组内条形的间距,默认值为0.8。
将各条形的宽度设置为各条形可用总空间的 40%。
将各条形的宽度设置为各条形可用总空间的 90%。
bar(**___**,[style](https://link.zhihu.com/?target=https%3A//ww2.mathworks.cn/help/matlab/ref/bar.html%3FsearchHighlight%3D%25E6%259D%25A1%25E5%25BD%25A2%25E5%259B%25BE%26s_tid%3Dsrchtitle_%2525E6%25259D%2525A1%2525E5%2525BD%2525A2%2525E5%25259B%2525BE_3%23mw_1c5ca259-be55-4bb7-85e3-b409c43fa397))
指定条形组的样式。类型有“group”和“stack”。
**group:**若y为n*m矩阵,则bar显示n组,每组m个条形图
**stack:**对矩阵的每一个行向量显示在一个条形中,条形的高度为该行向量中的分量和,其中同一条形中的每个向量用不同的颜色显示出来,从而可以显示每个向量中的分布。
指定分类数据
指示条形图类别的一种方法是将 X
指定为分类数组。bar
函数使用经过排序的类别列表,因此条形的显示顺序可能与您预期的有所不同。要保留顺序,请调用 reordercats
函数。
将 X
定义为分类数组,并调用 reordercats
函数来指定条形的顺序。然后将 Y
定义为条形高度向量,并显示条形图。
clc;clear; 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
对象的向量。
在第一个条形序列的末端显示值。通过获取第一个Bar
对象的XEndPoints
和YEndPoints
属性,获取条形末端的坐标。将这些坐标传递给text
函数,并指定垂直和水平对齐方式,让值显示在条形末端上方居中处。
clc;clear; x = [1 2 3]; vals = [2 3 6; 11 23 26]; b = bar(x,vals); xtips1 = b(1).XEndPoints; ytips1 = b(1).YEndPoints; labels1 = string(b(1).YData); text(xtips1,ytips1,labels1,'HorizontalAlignment','center','VerticalAlignment','bottom')
接下来,在第二个条形序列的末端上方显示值。
clc;clear; x = [1 2 3]; vals = [2 3 6; 11 23 26]; b = bar(x,vals); 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')
5、直方图
histogram(X)
基于X
创建直方图。histogram
函数使用自动分 bin 算法,然后返回均匀宽度的 bin,这些 bin 可涵盖X
中的元素范围并显示分布的基本形状。
histogram
将 bin 显示为矩形,这样每个矩形的高度就表示 bin 中的元素数量。
此处将上一节的条形图和直方图做了一个对比——条形图是用条形的高度表示频数的大小,而直方图实际上是用长方形的面积表示频数,当长方形的宽相等的时候可以用矩形的的高表示频数;
clc;clear; x = randn(10000,1); subplot(1,2,1);bar(x);title('bargram'); subplot(1,2,2);h = histogram(x);title('histogram');
6、饼图
——基础饼图
pie(X)
使用X
中的数据绘制饼图。饼图的每个扇区代表X
中的一个元素。
- 如果
sum(X) ≤ 1
,X
中的值直接指定饼图扇区的面积。如果sum(X) < 1
,pie
仅绘制部分饼图。
- 如果
sum(X) > 1
,则pie
通过X/sum(X)
对值进行归一化,以确定饼图的每个扇区的面积。
- 如果
X
为categorical
数据类型,则扇区对应于类别。每个扇区的面积是类别中的元素数除以X
中的元素数的结果。
——可偏移饼图
pie(X,[explode](https://link.zhihu.com/?target=https%3A//ww2.mathworks.cn/help/matlab/ref/pie.html%3FsearchHighlight%3D%25E9%259D%25A2%25E7%25A7%25AF%25E5%259B%25BE%26s_tid%3Dsrchtitle_%2525E9%25259D%2525A2%2525E7%2525A7%2525AF%2525E5%25259B%2525BE_6%23buiol_j-1-explode))
——从饼状图中分离出一部分,explode是与x同维的矩阵。当所有元素为零时,饼状图各部分连一起组成一个圆。当其中有非零元时,元素对应的扇形往外移。
——带标签饼图
pie(X,labels)
指定用于标注饼图扇区的选项。在本例中,X
必须为数值。
修改饼图的文本标签
clc;clear; X = 1:3; labels = {'Taxes','Expenses','Profit'}; p = pie(X,labels) t = p(6); t.BackgroundColor = 'cyan'; t.EdgeColor = 'red'; t.FontSize = 14;
指定百分比标签的格式——创建一个饼图,并指定格式表达式以使每个标签显示小数点后三位数。要在标签中包含百分号,请在表达式末尾指定'%%'
。
那么,又想有标签又想显示百分比怎么办呢?
还可以使用上述提及的逻辑变量进行分离:
——比较两个饼图
clc;clear; %创建包含两年财务数据的向量 y2010 和 y2011。 % 然后创建一个包含值标签的元胞数组。 y2010 = [50 0 100 95]; y2011 = [65 22 97 120]; labels = {'Investments','Cash','Operations','Sales'}; %创建一个 1×2 分块图布局,并显示两个饼图,每个饼图都有一个标题。 % 然后在布局的东侧图块中显示一个共享图例。 % 为此,请使用返回参数调用 legend 函数来存储图例对象。 % 然后通过将 Layout.Tile 属性设置为 'east',将图例移至 east 图块。 t = tiledlayout(1,2,'TileSpacing','compact'); % Create pie charts ax1 = nexttile; pie(ax1,y2010) title('2010') ax2 = nexttile; pie(ax2,y2011) title('2011') % Create legend lgd = legend(labels); lgd.Layout.Tile = 'east';
——三维饼图
pie3(X)
使用X
中的数据绘制三维饼图。X
中的每个元素表示饼图中的一个扇区。
- 如果
sum(X) ≤ 1
,X
中的值直接指定饼图切片的面积。如果sum(X) < 1
,pie3
仅绘制部分饼图。 - 如果
X
中元素的总和大于一,则pie3
会通过X/sum(X)
将值归一化,以确定饼图每个扇区的面积。
figure加不加都行,区别在于是否保留之前的图像。
为了偏移第二个饼图扇区,请将对应的explode
元素设置为 1。
创建三维饼图并指定文本标签。