MATLAB 绘图(二)


概述

本次的内容涉及到除了线图以外的绘图,包括离散绘图、极坐标绘图、曲面绘图和统计绘图。

  • 离散绘图:茎干图、阶梯图和散点图
  • 极坐标绘图:polar前缀
  • 曲面绘图:surf 曲面图和 mesh 网格图
  • 统计绘图:条形图、统计直方图和饼状图

子窗口

subplot 函数指的是将当前图窗划分为 m×n 网格,并在编号 p 指定的位置创建坐标区。

编号规则为:从第一行自左向右递增。

% subplot(m,n,p);
% 将绘图窗口分为 m 行 n 列的矩形区域
% 并在编号第 p 的区域中绘图
figure();
% 2*2 分割的第一块区域也就是左上角
subplot(2,2,1); 
x = linspace(-3.8,3.8);
y_cos = cos(x);
plot(x,y_cos);
title('Subplot 1: Cosine')
% 2*2 分割的第二块区域也就是右上角
subplot(2,2,2);
y_poly = 1 - x.^2./2 + x.^4./24;
plot(x,y_poly,'g');
title('Subplot 2: Polynomial')
% 2*2 分割的第三、四块区域也就是下方
subplot(2,2,[3,4]);
% 也可以写作 subplot(2,1,2); 指的是同一区域。
plot(x,y_cos,'b',x,y_poly,'g');
title('Subplot 3 and 4: Both')
1.png

离散绘图

茎干图(stem)

stem 函数的功能是描述离散数据中的冲激函数,以绘图高度反映一维离散序列中脉冲的强度。

数据值对应每一个脉冲的强度。

figure(1)
X = linspace(0,2*pi,50)';
Y = cos(X);
subplot(2,1,1);
stem(X);
subplot(2,1,2);
stem(X,Y); 
2.png

阶梯图(stairs)

stairs 函数的功能是描述离散数据中的阶跃函数,以绘图高度反映一维阶跃信号中的实时强度。

数据值为每一个时间周期的高度。

X = linspace(0,4*pi,40);
Y = sin(X);
figure(1);
subplot(2,1,1);
stairs(Y);
subplot(2,1,2);
stairs(X,Y);% 这种调用方式应当保证 X 有序
3.png

散点图(scatter)

scatter 函数绘制二维平面上的散点图,也就是不绘制曲线的 plot 函数。

输入参数为散点图的横坐标序列和纵坐标序列。

x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200); 
M_size = linspace(1,100,200);
figure(1);
subplot(2,1,1);
scatter(x,y);
subplot(2,1,2);
scatter(x,y,M_size);
4.png

极坐标绘图

我们直到直角坐标和极坐标系都是常用的坐标系,并且两种坐标系之间存在一定的转换关系,但是用 plot 函数绘制转换后的极坐标系图形总是不美观。

polar 函数是 MATLAB 中用于绘制极坐标图的函数。

polar 函数已经被 MATLAB 官方更替,更推荐使用的是新的函数方法:polarplot (新方法在旧版本的 MATLAB 如 2015b 版本仍不可用)。因此如果你在使用旧版本软件,使用 polar 方法;如果你在使用的版本支持 polarplot 函数,那就使用 polarplot 函数。

polarplot 函数就是极坐标系下的 plot 函数。以 polarplot(theta,rho) 形式调用。

theta = 0:0.01:2*pi; % 角度
rho = sin(2*theta).*cos(2*theta); % 幅值
figure(1);
polarplot(theta,rho); 
% 此处有版本兼容问题,旧版本无法使用该函数
% 旧版本应当使用 polar(theta,rho);
5.png

同理,也有 polarscatter 函数。

曲面绘图

曲线上的点是无限的,于是计算机用散点序列代替直线;曲面上由无数曲线构成,自然类比想到使用网格代替平面。

surf 函数

surf 函数将创建一个三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度;此外,函数将对三维曲面进行渲染,每个区域的颜色与高度成比例。

x0 = 1:0.5:10;
y0 = 1:20;
[X,Y] = meshgrid(x0,y0);
% meshgrid 函数将创建两个由 x0*y0 构成的二维网格矩阵。
% X 表示网格中对应位置的 x0 值
% Y 表示网格中对应位置的 y0 值
% - 可以预见到对于同一个 y0 ,x0 值相同。
Z = sin(X) + cos(Y);
surf(X,Y,Z);
6.png

其他 surf 类型曲面图函数

  • surfc 函数:在 surf 函数的基础上,在底部绘制等高线图。
  • surfl 函数:在 surf 函数的基础上,用光线为三维图渲染。

mesh 函数

surf 函数将创建一个三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度;函数仅对于三维网格进行渲染,每个区域的颜色与高度成比例。

[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
figure(1);
mesh(Z);
7.png

其他 mesh 类型曲面图函数

  • meshc函数:在 mesh 函数的基础上,在底部绘制等高线图。
  • meshz 函数:在 mesh 函数的基础上,每个网格高度以柱状反映。

统计绘图

bar 函数

bar 函数顾名思义是绘制条形图的函数。

由于统计图表有着多种形式的表现需求,这里使用子窗口绘图来实现。

x = 190:1:200;
y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
z = [2 2 3; 2 5 6; 2 8 9; 2 11 12];
figure(1);
subplot(2,3,1);
bar(y);
subplot(2,3,2);
bar(y,'r')
subplot(2,3,3);
bar(x,y);
subplot(2,3,4);
bar(y,0.4);
subplot(2,3,5);
bar(z);
subplot(2,3,6);
bar(z,'stacked')
8.png

其他 bar 类型函数:

  • bar3 函数:绘制三维条形图
  • barh 函数:绘制水平条形图
  • bar3h 函数:绘制三维水平条形图

histogram 函数

histogram 函数的功能是根据传入的数据绘制统计直方图。

x = randn(10000,1);
% 10000 个高斯分布随机数
nbins = 25; 
% 直方图分布区间数量
figure(1);
subplot(2,1,1);
h = histogram(x);
subplot(2,1,2);
h = histogram(x,nbins);
9.png

其他 histogram 函数:

  • histogram2 函数:绘制二元统计直方图;
  • pareto 函数:绘制帕累托图
  • polarhistogram 函数:在极坐标系上绘制根据角度绘制分布图

pie 函数

pie 函数的功能是根据传入的比例序列绘制饼状图。

特别地:如果 pie(x) 中,

  • sum(x) < 1,仅绘制部分饼状图。
  • sum(x) > 1,先做归一化后绘制饼状图。
figure(1);
X = [1 3 0.5 2.5 2];
explode = [0 1 0 1 0];
labels = {'A','B','C','D','E'};
subplot(2,2,1);
pie(X);
% 归一化计算比例
subplot(2,2,2);
pie(X,explode);
% explode 选中的块会突出显示
subplot(2,2,3);
pie(X,labels);
% 以标签代替百分数
subplot(2,2,4);
x1 = [0.19 0.22 0.41];
pie(x1);
% 不足 100% 则绘制部分饼状图
10.png

其他 pie 类型函数:

  • pie3 函数:绘制三维饼状图;

其他可视化绘图

这部分内容极少使用,不需要在意。

heatmap 函数:根据数据集绘制热图;

wordcloud 函数:使用文本数据创建词云图;

geobubble 函数:以可视方式呈现特定地理位置的数据值

小结

本节中提到除了线图以外的另外四种常见绘图:离散绘图、极坐标绘图、曲面绘图和统计绘图。

值得一提的是,对于极坐标绘图的函数方法,官方已经给出更佳的更新,但旧版本中无法应用,这里给出的为新版本的方案。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容