数学建模社区-数学中国
标题:
matlab 画等温线
[打印本页]
作者:
2744557306
时间:
2023-11-12 11:13
标题:
matlab 画等温线
解析代码:
clear; close all;
复制代码
这两行清空MATLAB的工作区,并关闭所有图形窗口。
fphn=fopen('hunan.txt','r');
A+ T7 E G% {8 W5 U; W9 g- S c
4 g8 d4 \* h+ f7 i! Z
hnb=fgetl(fphn);
* S1 ]8 x# `0 R) R9 D
! l( K9 v6 V! ]2 U% T. p3 |
hnmap=fscanf(fphn,'%f %f',[2,59]);
" N9 H0 w! N3 k# ?
9 \ D( T+ q' ?' h, g
fclose(fphn);
复制代码
这部分打开名为 'hunan.txt' 的文件,读取文件中的湖南省的经纬度数据。fgetl 用于读取文件的第一行,而 fscanf 用于读取文件的剩余部分。hnmap 存储了湖南省59个位置的经纬度,每一列对应一个位置。文件的每一行应包含两个浮点数。
hnmap=hnmap';
+ x# l2 a5 o3 }: D% C+ Q
1 c% l" H( D ]2 `" X0 @
xa=hnmap(:,[1]);
6 _ G# K; ?; B: _
5 |2 e3 K$ X( V2 M( ] x, m
ya=hnmap(:,[2]);
2 X9 X$ q* F6 ?% j6 U
: Y; R$ E U/ h
复制代码
这里对 hnmap 进行了转置,然后将经度和纬度分别存储在 xa 和 ya 中。
fp=fopen('LATLON57.txt','r');
9 S* n' r# ?9 e, j2 A4 u+ ~
* q0 f$ L) w6 Z* a" q
LL57=fscanf(fp,'%d %f %f',[3,97]);
* |: Y% |, I, t7 x& L4 p9 f
" F. G( S2 H- j( q# ~
fclose(fp);
% q# v4 X; T Z
! w* @* P; m) w1 l" G0 {4 K) ]
复制代码
这部分打开名为 'LATLON57.txt' 的文件,读取文件中的湖南省97个县的编号和经纬度数据。LL57 存储了97个县的相关信息,每一列对应一个县。文件的每一行应包含一个整数和两个浮点数。
LL57=LL57';
5 R9 }' {7 O. k/ R5 N
; Q! H' j/ ?2 J/ X
x=LL57(:,[3])/10;
! M5 h9 i. B {3 K
) d1 z) n. t: t! C, \4 F2 i3 v. C
y=LL57(:,[2])/10;
复制代码
这里对 LL57 进行了转置,然后将经度和纬度分别存储在 x 和 y 中。在这里,经度和纬度都除以10,可能是由于数据单位不同而进行的缩放。
fpy=fopen('etw00100.txt','r');
2 S" [* `. h& p) m# C
( f' \, A3 x+ `
ymd57=fscanf(fpy,'%d',[3,1]);
+ T! A# c+ u7 u$ L v/ ?
7 Z3 ?: J7 D+ i3 x5 z$ [
yu97=fscanf(fpy,'%d %f %f',[3,97]);
, Z: e) K( F5 b0 W* k
, g4 ?& O; X: P
fclose(fpy);
复制代码
这部分打开名为 'etw00100.txt' 的文件,读取文件中的湖南省97个县的温度数据。yu97 存储了97个县的温度信息,每一列对应一个县。文件的每一行应包含一个整数和两个浮点数。
yu97=yu97';
, P0 `+ q0 ~& G8 b7 i5 d
1 [" A) Y( `9 F
z=yu97(:,[2]);
复制代码
这里对 yu97 进行了转置,然后将温度数据存储在 z 中。
hold on;
6 G& g7 g- {4 v: G. L) d
9 z3 H$ c! V2 X/ f# M
plot(xa,ya,'.','markersize',5,'color','red');
复制代码
这部分开始绘制图形,用红色的小点表示湖南省的边界。
plot(x,y,'.','markersize',6);
复制代码
这部分继续绘制图形,用蓝色的小点表示湖南省97个县的位置。
[xi,yi]=meshgrid(linspace(min(x),max(x),25),linspace(min(y),max(y),25));
" b2 H" K" q/ a# E
4 G( d" F0 P6 [1 ]
zi=griddata(x,y,z,xi,yi,'cubic');
: ]/ z4 z/ @" J% _( A4 Q
9 o/ ]3 I8 \) O# i
复制代码
这里创建了一个网格,然后使用 griddata 进行三维数据插值,得到 zi 表示的湖南省97个县的温度分布。linspace 用于生成指定范围内的等间隔数据。
hold on;
1 p: s' J+ @6 r: X
: g9 B+ R4 i) P- M
[c,h]=contour(xi,yi,zi,'b-');
复制代码
这部分绘制等值线图,表示湖南省97个县的温度等值线。contour 用于画等值线,xi 和 yi 是插值后的网格,zi 是温度数据,'b-' 表示蓝色实线。
clabel(c,h);
- `2 h! N: @( `% O% S' D
1 v( \ Q& |6 l3 E9 `, t
hold off;
复制代码
这里用于在等值线上标注温度值,然后通过 hold off 结束图形的绘制。
! n7 D( J" Q: \# T7 d
请注意,代码中有一个拼写错误,i 应该是 ;,即 hold off;i 应该为 hold off;。
# `7 h5 m/ u- g) L) ?( u
1 S9 d& B: W3 @8 M; \$ }
! J) ]1 g# Y( ^/ D1 U4 ^! P3 \
最后结果图如下:
$ N3 I/ r2 S: ~ s1 t1 s7 {: U
2023-11-12 11:12 上传
下载附件
(182.96 KB)
8 l) A: {* v5 X/ m2 A
, j* l" ^' e# R, u( C
具体附件代码如下:
9 ^. A; l8 I$ d9 O6 B: O
/ K# s% |5 t: F! n! \+ v/ r
7 \& f! p0 ]4 _0 c4 R* R8 [
8 v6 Y9 ^* o _/ I
$ ?1 U" y7 E) _; m( `
7 d; ]: D# R, K! d) C
画等温线.rar
2023-11-12 11:13 上传
点击文件名下载附件
下载积分: 体力 -2 点
4.09 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5