matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图

今天早上刚讲完课,一个小时的培训准备起来也很不容易呐,但是讲完还是挺开心的啦。

现在来把绘图篇更新一下。

这篇主要就讲matlab数据可视化,介绍一下matlab基本图形绘制。


绘图篇

数据导入

给大家解释一下数据文件,beijing_siteinfo.csv给出了北京12个国控站的站点信息。beijing_pm2_5_2014_2018_Jan.nc给出了2014-2018年5年1月份PM2.5数据。

数据仅matlab教学使用哈,可以到资源里下:https://download.csdn.net/download/qq_27984679/15597542

没办法,博客没办法直接添加附件,太不方便了。

clc;clear;%close all;
bjinfo=importdata('../data/beijing_siteinfo.csv') %读入csv文件中站点信息
textinfo=bjinfo.textdata %读入csv文件中站点文本信息
datainfo=bjinfo.data %读入csv文件中站点数据信息
bjinfo=readmatrix('../data/beijing_siteinfo.csv') %其他方法读入csv文件数据信息
pm2_5=ncread('../data/beijing_pm2_5_2014_2018_Jan.nc','pm2_5'); %读入PM2.5数据
lat=ncread('../data/beijing_pm2_5_2014_2018_Jan.nc','lat'); %读入纬度数据
lon=ncread('../data/beijing_pm2_5_2014_2018_Jan.nc','lon'); %读入经度数据
siteid=ncread('../data/beijing_pm2_5_2014_2018_Jan.nc','siteid'); %读入站点数据
ind=find(pm2_5==-999);pm2_5(ind)=nan; %将缺省值-999替换为NaN

数据可视化

折线图(plot)

task1: 画出第1~4个站点2014年1月PM2.5的逐小时时间序列;
四条线分别为红色,蓝色,粉色,绿色;
线型为实线,线宽为2;
给出图例,x,y轴标签,标题;

pm25_m1=reshape(pm2_5(:,:,1,:),744,12);
color=['r','b','m','g'];
figure
for i=1:4
plot(pm25_m1(:,i),'color',color(i),'linewidth',2);hold on %画出折线图
end
%legend({'site1','site2','site3','site4'})  %给出图例
legend(textinfo(1:4,2))  
xlabel('hours')     %给出x轴标签
ylabel('PM_{2.5}')  %给出y轴标签
title('2014 Jan PM_{2.5} concentrations') %给出标题

matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图_第1张图片


散点图(scatter)

task2: 比较第1~4个站点2014年1月PM2.5浓度;
散点实心,大小25;
画出1:1线,线型实线,线宽2,红色;

x=1:600;
y=x;
sz = 25;  %设置散点大小
c = linspace(1,10,length(pm25_m1(:,1)));
figure
scatter(pm25_m1(:,1),pm25_m1(:,2),sz,c,'filled');hold on  %画出散点图
plot(x,y,'r-','linewidth',2);hold on

matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图_第2张图片


饼图(pie)

task3: 统计第1~4个站点2014年1月PM2.5浓度优良差天数占比;
优良差定义:(这个定义仅是这里示例用的哈)
优:浓度低于等于35;
良:浓度大于35且小于等于75;
差:浓度大于75;
画出爆炸效果饼图;

 

for i=1:4
figure
id1=find(pm25_m1(:,i)<=35);
id2=find(pm25_m1(:,i)>35&pm25_m1(:,1)<=75);
id3=find(pm25_m1(:,i)>75);
num1=numel(id1);
num2=numel(id2);
num3=numel(id3);
num=[num1,num2,num3];
label={'优','良','差'}
explode=[0,0,0.5];  %设置爆炸效果圆心距离
%pie(num)  %饼图+百分比标签
%pie(num,label)  %饼图+文本标签
pie(num,explode,label)  %爆炸效果饼图
end

matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图_第3张图片

合成文本和百分比标签

p=pie(num);
pText = findobj(p,'Type','text');
percentValues = get(pText,'String'); 
txt = {'优: ';'良: ';'差: '}; 
combinedtxt = strcat(txt,percentValues); 
pText(1).String = combinedtxt(1);
pText(2).String = combinedtxt(2);
pText(3).String = combinedtxt(3);

matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图_第4张图片


柱状图 (bar)

task4: 统计第1~4个站点2014年1月PM2.5浓度优良差天数占比;

bar(num)  %画出柱状图

matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图_第5张图片

柱状图的作用和饼图类似,但如果分类较多,适合用柱状图,否则饼图每个扇形太小就会看不清楚。


直方图  (histogram)

task5: 给出第1个站点2014年1月PM2.5浓度频数分布和频率分布;
x轴范围限制在[0,300];

figure
histogram(pm25_m1(:,1))
%xlim([0,300])

figure
histogram(pm25_m1(:,1),'normalization','pdf') %画出频率分布直方图
%xlim([0,300])

如果把‘normalization’后面的参数pdf改成count,那画出来的也是频数分布直方图。

matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图_第6张图片matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图_第7张图片

这里左边是频数分布直方图,右边是频率分布直方图。

直方图和柱状图的区别在于,直方图一般x轴是连续的,适合数值型数据;而柱状图是分隔的,适合分类型数据。


箱线图(boxplot)

task6: 比较12个站点2014年1月PM2.5浓度的各个统计量(最大最小值、中位数等);

boxplot(pm25_m1)

matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图_第8张图片

箱线图适合一组数据多种统计量的比较,我这里就是比较了12个站点2014年1月的PM2.5。

箱子的上边缘Q3和下边缘Q1分别是下四分位数和上四分位数;

四分位距IQR=Q3-Q1;

上限=Q3+1.5IQR,max)取最小,

下限=Q1-1.5IQR ,min)取最大。

关于箱线图怎么看可以参考这篇博客,这里面有张图非常清楚:https://blog.csdn.net/weixin_39980917/article/details/111579740?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs&dist_request_id=1328603.1454.16148714256221063&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs


三维图 (surf)

task7: 画出全球地面高度,z轴表示高度

height=double(ncread('../data/global_surface_height.nc','height')); %从文件读取数据,第一个参数为文件名,第二个参数为变量名
lat=double(ncread('../data/global_surface_height.nc','lat'));
lon=double(ncread('../data/global_surface_height.nc','lon'));
[cnlat,cnlon]=meshgrid(lat,lon);
figure
surf(cnlon,cnlat,height)  %画出高度分布三维图
%set(gca,'ZDir','reverse');  %调换z轴正负方向

matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图_第9张图片matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图_第10张图片


地图

task8: 画出全球地面高度,颜色表示高度

figure
pcolor(cnlon,cnlat,height);shading flat %画出高度分布地图
colorbar
caxis([0,6000])
hold on

load ../data/mask1x1.mat  %读入海岸线文件
mask_lon=lon;mask_lat=lat;
[mask_lon1,mask_lat1]=meshgrid(mask_lon,mask_lat);
contour(mask_lon1,mask_lat1,mask,'k'); %给地图加上海岸线
hold on
set(gca,'FontSize',18)
xlabel('lon','fontweight','bold','FontSize',22);
ylabel('lat','fontweight','bold','FontSize',22);

matlab笔记——绘图篇——折线图+散点图+饼图+直方图+柱状图+箱线图+三维图+地图_第11张图片

那这里pcolor画的地图是非常粗糙的,如果大家想用matlab画好看的地图,建议下载m_map包来进行图形绘制:https://www.eoas.ubc.ca/~rich/map.html


那这些就是一些最最基本的matlab画图,更多的技巧和设置大家自行doc官方文档或者百度探索吧~

讲座完事儿了,也不知道有没有动力再更新进阶篇,哈哈哈,想偷懒啦。就随缘更新吧~

科研干饭人加油!

你可能感兴趣的:(matlab笔记,科学绘图)