一、线图
1.1 折线图
绘制折线图可以直接使用plot函数作用于x和y。
LineStyle='--'表示设置线条形式为虚线。
LineWidth=1.5表示设置线条粗细为1.5。
Color=[0.3668,0.2640,0.6465]表示设置线条颜色按RGB色谱设置为颜色:[0.3668,0.2640,0.6465]。
grid on表示设置网格线
注意:如果y为连续的函数,则绘制的为y的函数图像即普通的线图。
% 折线图
x = 1:1:10;
y = [2,3,4,2,5,7,9,5,8,1];
plot(x,y,LineStyle='--',LineWidth=1.5,Color=[0.3668,0.2640,0.6465])
xlim([0 11])
ylim([0 10])
xlabel('时间')
ylabel('个数')
grid on
代码运行结果如下:
1.2 复式折线图
可以先使用plot函数绘制x和y的图像,再使用hold on,在绘制好x-y图像的基础上再使用plot函数绘制x-z图像。
或者直接plot(x,y,x,z)将两个图像全部画出。
本文以第一种方法为例绘制。
% 复式折线图
x = 1:1:10;
y = [2,3,4,2,5,7,9,5,8,1];
plot(x,y,LineStyle='--',LineWidth=1.5,Color=[0.3668,0.2640,0.6465])
z = [5,3,8,4,9,4,2,1,5,6];
hold on
plot(x,z)
xlim([0 11])
ylim([0 10])
xlabel('时间')
ylabel('个数')
grid on
%plot(x,y,x,z,LineStyle="--")
代码运行结果如下:
1.3 双轴线图
使用plotyy函数绘制双轴线图,使用set函数给两个纵轴命名。
% 双轴线图
x = 0:0.01:20;
y1 = 100*sin(x);
y2 = cos(x);
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');
set(get(AX(1),'Ylabel'),'string','Y1')
set(get(AX(2),'Ylabel'),'string','Y2')
xlabel('time')
set(H1,LineStyle='--',LineWidth=1.5)
set(H2,'LineStyle',':','LineWidth',1.5)
代码运行结果如下:
二、半对数线图
2.1 x轴为对数刻度的半对数线图
使用semilogx函数将x轴设置为对数刻度,y轴保留线性刻度。
% x轴是对数刻度, y轴是线性刻度
x = 0:0.05:1;
y1 = -900*x + 1000;
y2 = -90*x +100;
y3 = -9*x + 10;
semilogx(x, y1,x,y2,x,y3);
grid on
代码运行结果如下;
2.2 y轴为对数刻度的半对数线图
使用semilogy函数将y轴设置为对数刻度,x轴保留线性刻度。
% x轴是线性刻度, y轴是对数刻度
x = 0:0.05:1;
y1 = -900*x + 1000;
y2 = -90*x +100;
y3 = -9*x + 10;
semilogy(x, y1,x,y2,x,y3);
grid on
代码运行结果如下:
2.3双对数线图
使用loglog函数将x轴和y轴都设置为对数刻度。
% 双对数线图
x = 0:0.05:1;
y1 = -900*x + 1000;
y2 = -90*x +100;
y3 = -9*x + 10;
semilogx(x, y1,x,y2,x,y3);
loglog(x, y1,x,y2,x,y3);
grid on
代码运行结果如下:
三、直方图
使用bar函数,在bar(y)后面加上bar(y,1)表示直方图柱形宽度占刻度的100%,这样各个柱形便连在了一起。再将直方图的柱形边缘线删去即可:EdgeColor="none"。
y = [1,2,5,8,9,4,6,2,5,7];
bar(y,1,EdgeColor="none")
ylim([0 10])
代码运行结果如下:
如需对直方图美化可以参考如下文章1.2部分:
https://blog.csdn.net/hahorange/article/details/136859114?spm=1001.2014.3001.5501
四、散点图(气泡图)
4.1 散点图
使用scatter函数作用于x和y即可。
% 散点图
x = [1,2,3,5,6,7,9,10,11];
y = [4,7,4,9,10,45,30,56,33];
scatter(x,y,LineWidth=1.5)
axis([0 12 0 70])
代码运行结果如下:
4.2 气泡图
绘制思路:
- 在导入x和y后,给各组数据设置大小sz举证
- 使用scatter函数作用于x,y和sz。
- 如果希望气泡被颜色填充,本文以渐变色为例,代码如下。其他颜色设置可以参考如下文章:
散点图 - MATLAB scatter- MathWorks 中国
% 气泡图
x = [1,2,3,5,6,7,9,10,11];
y = [4,7,4,9,10,45,30,56,33];
sz = [100,200,300,1000,900,800,700,600,500];
c = linspace(1,10,length(x));
scatter(x,y,sz,c,'filled')
axis([0 12 0 70])
代码运行结果如下:
五、箱线图
箱线图既可以使用boxplot函数也可以使用boxchart函数,本文单组箱线图使用boxplot函数为例,多组箱线图使用boxchart函数为例,以展示两种函数绘制箱线图的区别。
5.1 单组箱线图
使用boxplot函数直接作用于x上即可。
% 单组箱线图
x = [17,24,76,83,90,42,49,26,33,65];
boxplot(x)
代码运行结果如下:
5.2 多组箱线图
使用boxchart函数作用于y的转置上即可。
此外可以使用mean(y,2)求出每组的平均值,并可以使用plot函数绘制平均数折线图在箱线图上。
注意:如果直接作用于y上,以本文为例将得到10组箱线图而不是预期的四组。
% 多组箱线图
x = {'大一','大二','大三','大四'};
y = [17 24 76 83 90 42 49 26 33 65;23 5 28 89 91 48 30 32 39 66;
79 6 13 59 97 29 31 38 45 72;10 12 49 96 78 35 37 44 46 53];
boxchart(y')
hold on
meany = mean(y,2);
plot(meany,'-o')
set(gca,'xticklabels',x)
legend('人数','平均人数')
代码运行结果如下:
六、雷达图
本文雷达图使用spider_plot函数,该函数需要自行下载,源代码见如下网站:
spider_plot - File Exchange - MATLAB Central
作者根据个人便好,对源代码进行了修改美化,美化步骤见如下网站:
https://blog.csdn.net/hahorange/article/details/136922879?spm=1001.2014.3001.5501
在准备好spider_plot函数后方可绘制雷达图。
6.1 单组数据的雷达图
使用spider_plot函数作用于x即可
'AxesLabels'表示设置雷达图每一部分名称;
'AxesLimits'表示设置雷达图的范围,如果输入的x超出了范围则会报错:Error: Please make sure the axes shaded limits are within the min and max axes limits.
'AxesInterval'表示设置雷达图的圈数;
'AxesPrecision'表示雷达图上刻度保留小数的位数;
'AxesDisplay', 'one'表示只显示一组刻度
更多解释见如下网站:
https://ww2.mathworks.cn/matlabcentral/fileexchange/59561-spider_plot
% 单组数据
X = [60,100,80,80,90,50,90,80,40];
spider_plot(X, ...
'AxesLabels',{'语文','数学','英语','物理','化学','生物','政治','历史','地理'},...
'AxesLimits',[0 0 0 0 0 0 0 0 0; ...
100 100 100 100 100 100 100 100 100], ...
'AxesInterval', 4, ...
'AxesPrecision', 0, ...
'AxesDisplay', 'one')
运行代码结果如下:
6.2 多组数据的雷达图
使用spider_plot函数作用于P上。
注意:
1. 多组数据输入时需要以P = [X;Y;Z]这样形式输入;
2. 需要legend函数设置图例
% 多组数据
X = [60,100,80,80,90,50];
Y = [70,90,90,85,95,99];
Z = [100,40,90,70,60,40];
P = [X;Y;Z];
spider_plot(P, ...
'AxesLabels',{'语文','数学','英语','物理','化学','生物'},...
'AxesLimits',[0 0 0 0 0 0; ...
100 100 100 100 100 100], ...
'AxesInterval', 4, ...
'AxesPrecision', 0, ...
'AxesDisplay', 'one', ...
'AxesFont', 'Times New Roman',...
'LabelFont', 'Times New Roman',...
'AxesFontSize', 12,...
'LabelFontSize', 12)
legend('小明','小红','小李')
代码运行结果如下: