基于Matlab的统计图绘制(2)——线图、半对数线图(双对数线图)、直方图、散点图(气泡图)、箱线图、雷达图

本文详细介绍了如何在MATLAB中使用各种函数绘制折线图、复式折线图、半对数线图、直方图、散点图、气泡图、箱线图和雷达图,包括设置样式、轴标签和范围等,适合初学者学习和实践图形绘制。
摘要由CSDN通过智能技术生成

一、线图

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('小明','小红','小李')

代码运行结果如下: 

  • 54
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值