Matlab之画图相关总结

最近遇到许多用Matlab画图的问题,有时候遇到画不出来的时候是挺尴尬的,所以我一般都是一边画一边查。但是比赛时候不能够这样浪费时间啊,那么就总结一下吧!

一般画图

可视化

数据分析需要画很多图,比如条形图、直方图、盒图、阶梯图、火柴图等等。

1.条形图
条形图是用宽度相同的直线条的高低或长短来表示统计指标数值的大小.
条形图根据表现资料的内容可分为单式条形图复式条形图结构条形图.
单式条形图反映统计对象随某一因素变化而改变的情况;复式条形图可以反映统计对象随两个因素变动而变动的情况;结构条形图则反映不同统计对象内部结构的变化情况.

命令有bar,bar3,barh 和bar3h,其中bar 和bar3 分别用来绘制二维和三维竖直方图,barh 和bar3h 分别用来绘制二维和三维水平直方图

clc, clear
y=[5 3 2 9;4 7 2 7;1 5 7 3];
subplot(3,2,1),bar(y,1)
x=[5 9 11];
subplot(3,2,2),bar3(x,y,0.3) % 三维竖直方图 
subplot(3,2,3),bar(x,y,'grouped')% 使同一组直方条紧紧靠在一起
subplot(3,2,4),bar(rand(2,3),.75,'stack')% 把同一组数据描述在一个直方条上
subplot(3,2,5),barh(y)% 水平直方图
subplot(3,2,6),bar3h(x,y,0.3)% 水平直方图
colormap(bone) %设置颜色

这里写图片描述

2.直方图
将观测数据的取值范围分为若干个区间, 计算落在每个区间的频数或频率.在每个区间上画一个矩形, 以估计总体的概率密度.

clc, clear
n = 10;
x = 3:0.5:6;
subplot(2,2,1),hist(x,n) % 绘制直方图,n表示分组的个数,默认为10
subplot(2,2,2),[h,stats] = cdfplot(x) % 作数据x的经验分布函数图,stats返回数据集中的最大值、最小值、中位数、平均值和标准差.
subplot(2,2,3),histfit(x) % 正态密度曲线
subplot(2,2,4),histfit(x,n) %做直方图和正态曲线
colormap(cool)

这里写图片描述

以上两种图形设置颜色:使用colormap()

挑选以下几种色图类型
autumn 从红色平滑变化到橙色,然后到黄色。
bone 具有较高的蓝色成分的灰度色图。该色图用于对灰度图添加电子的视图。
cool 包含青绿色和品红色的阴影色。从青绿色平滑变化到品红色。
copper 从黑色平滑过渡到亮铜色。
gray 返回线性灰度色图。
jet 从蓝到红,中间经过青绿、黄和橙色。它是hsv色图的一个变异。
pink 柔和的桃红色,它提供了灰度图的深褐色调着色。
white 全白的单色色图。
winter 包含蓝和绿的阴影色。
其实越朴素的颜色越好看。

3.盒图
盒图是由五个数值点组成:最小值,下四分位数,中位数,上四分位数,最大值.中间的盒子是从Q1延伸到Q3,盒子里的直线标示出中位数的位置,盒子两端有直线往外延伸到最小数与最大数.

clc, clear
x = 3:0.5:6;
boxplot(x)

这里写图片描述

4.阶梯图

clc, clear
x = 3:0.5:6;
stairs(x)

这里写图片描述

5.火柴图

clc, clear
x = 1:10;
stem(x)

这里写图片描述


二维与三维数据可视化

1.散点图

clc, clear
x=[5 9 5 3 6 1 4 5];
y=[4 9 5 4 5 7 5 2];
z=[6 4 3 8 1 2 4 6];
subplot(1,2,1),scatter(x,y,'*') % 二维散点图
subplot(1,2,2),scatter3(x,y,z,'*') % 二维散点图

这里写图片描述

2.曲面图

clc, clear
[X,Y] = meshgrid(-8:.5:8); % 生成数据点矩阵
R = sqrt(X.^2 + Y.^2) + eps; 
Z = sin(R)./R; % Z = f(X, Y)
figure 
mesh(X,Y,Z,'FaceLighting','gouraud','LineWidth',0.5)

这里写图片描述


函数画图

1.一般画图plot

已知X和Y,就可以使用plot来画图了,点图 or 线图通过参数来调。
例子如下:

x = 1:10;
y = 1:10;
plot(x, y, '*'); % 画点图
hold on
plot(x, y); % 默认为线图

这里写图片描述

也可以是已知x,然后知道y关于x的计算公式,也就是说先通过计算公式计算出y,再通过plot画出点图or线图

x = 1:10;
y = 2*x.^2 - 10;% 计算出y
plot(x, y, '*')
hold on
plot(x, y)

这里写图片描述

当然,plot可以调以下参数,也会导致样式的不同:

       b     blue          .     point              -     solid
       g     green         o     circle             :     dotted
       r     red           x     x-mark             -.    dashdot 
       c     cyan          +     plus               --    dashed   
       m     magenta       *     star             (none)  no line
       y     yellow        s     square
       k     black         d     diamond
       w     white         v     triangle (down)
                           ^     triangle (up)
                           <     triangle (left)
                           >     triangle (right)
                           p     pentagram
                           h     hexagram

各样式对比一下:

x = 1:10;
y1 = x; y2 = x+0.5; y3 = x+1; y4 = x+1.5; y5 = x+2;
plot(x, y1, 'r')
hold on
plot(x, y2, 'b')
hold on
plot(x, y3, '*g')
hold on
plot(x, y4, '-c')
hold on
plot(x, y5, '-.')

这里写图片描述


2.符号函数画图

如果遇到符号函数,怎么画图呢?今天就遇到了,所以查了一些方法。

1.使用ezplot
ezplot即:Easy to use function plotter。它是一个易用的一元函数绘图函数 。特别是在绘制含有符号变量的函数的图像时。

有几种方式:
1、ezplot(fun):在默认区间-2π< x < 2π 绘制函数fun(x)的图像,其中fun(x)是x的一个显函数。fun可以是一个函数句柄或者字符。

2、plot(fun,[xmin,xmax]):在区间 xmin < x< xmax 绘制函数fun(x)。

3、ezplot(fun2):在默认区间-2π < x<2π, -2π < y< 2π 绘制fun2(x,y)=0。
4、ezplot(fun2,[xymin,xymax]):在xymin < x < xymax和xymin < y < xymax 范围内绘制fun2(x,y)=0图像。
5、ezplot(fun2,[xmin,xmax,ymin,ymax]):在xmin < x < xmax和ymin < y < ymax 范围内绘制fun2(x,y)=0图像。
6、ezplot(funx,funy):在默认区间0 < t < 2π 绘制参数定义的平面曲线funx(t)和funy(t).
7、ezplot(funx,funy,[tmin,tmax]):在默认区间tmin < t < tmax绘制参数定义的平面曲线funx(t)和funy(t).
8、ezplot(…,figure_handle):在句柄图像定义的图像窗口绘制特定区间的给定函数图像。
9、ezplot(axes_handle,…):用坐标轴句柄绘制而不是当前坐标轴句柄(gca)绘制函数图像。
10、h = ezplot(…)返回所有绘制图像的句柄。

一般就画如下函数图:

clc, clear
% 一般函数画图
syms x
y = x^(3/2);
ezplot(y)% 默认在(-2pi,2pi)画图
hold on

y1 = x;
ezplot(y1, [0, 10])% 在(0, 10)内画图
hold on

% 参数方程画图
syms t
xt = sin(t);
yt = cos(t);
ezplot(xt, yt)% 默认在区间(0, 2pi)绘制参数定义的平面曲线
hold on
ezplot(xt, yt, [-pi, 0])% 在区间(-pi, 0)绘制参数定义的平面曲线
hold on

%  隐函数画图
ezplot('x^2*sin(x+y^2)+y^2*exp(x)+6*cos(x^2+y)', [-6 6])% 在x∈(-6,6),y∈(-6.6)内画图
title('ezplot画图实例')

这里写图片描述

ezplot颜色怎么调??直接调是不可行的!!那么就得获取句柄,然后设置就可以了!!

syms x
y = x^(3/2);
h = ezplot(y);% 获取句柄
set(h,'Color','b','LineWidth',5)% 蓝色,粗5
hold on

2.用plot画

我不想用ezplot画怎么办,能用plot画吗??plot怎么画??
这就需要将符号函数转换为数值函数
使用str2func + vectorize 函数:str2func 函数可以直接将字符串转化为函数句柄

clc, clear
syms x
y = x^(3/2);% 这是符号函数
y = str2func(['@(x)', vectorize(y)]);% 变为函数句柄
x = 1:10;
plot(x,y(x))
title('符号函数化成函数句柄')

这样依然可以使用plot画这个符号函数了,但是plot是不能直接画符号函数的,转换成函数句柄就可以画了。


3.画函数变化率曲线

变化率其实就是求多个点的斜率,然后画出的图形。
可以自己手工取一些无限接近的点,然后相邻两点求k,放到一个新的向量里,然后用plot画个图就行

clc, clear
x = 0:0.1:10;% 取接近的点
y = x.^2;
len = length(x);
for i=2:len
    k(i-1) = (y(i)-y(i-1))/(x(i)-x(i-1));% 计算两点之间斜率
end
plot(x(1:len-1), k, 'o')% 画出图像
hold on
% 对比精确导数图像
y1 = 2*x;
plot(x,y1) 

这里写图片描述

其实也可以使用diff函数,这个函数就是求差分的。

f = @(x)x.^2;% 这里使用函数句柄
x=1:0.1:10;
y=f(x);
d=diff(y)/0.1;% 效果同上
n=length(x);
plot(x(1:n-1),d,'o');
hold on
% 与精确导数图对比
y1 = 2*x;
plot(x,y1) 

图形如上图一样。。

以上为今天总结的MATLAB画图,有需要再画的继续补充

猜你喜欢

转载自blog.csdn.net/karry_zzj/article/details/76594418