数学建模社区-数学中国
标题:
matlab 画等温线
[打印本页]
作者:
2744557306
时间:
2023-11-12 11:13
标题:
matlab 画等温线
解析代码:
clear; close all;
复制代码
这两行清空MATLAB的工作区,并关闭所有图形窗口。
fphn=fopen('hunan.txt','r');
7 T4 G' g! H7 r2 K4 t: n
% _5 D- d% _8 U3 e% G
hnb=fgetl(fphn);
; H5 _& b! H! ?8 P( i- u
) y" w4 N! t0 W; S
hnmap=fscanf(fphn,'%f %f',[2,59]);
6 T [; g' P6 e2 `, S3 q
3 H Y1 y( X1 N
fclose(fphn);
复制代码
这部分打开名为 'hunan.txt' 的文件,读取文件中的湖南省的经纬度数据。fgetl 用于读取文件的第一行,而 fscanf 用于读取文件的剩余部分。hnmap 存储了湖南省59个位置的经纬度,每一列对应一个位置。文件的每一行应包含两个浮点数。
hnmap=hnmap';
+ F9 D; B% E% E% v7 o4 T: {
! N6 z, ]$ |, e# i5 L# i/ b& ]
xa=hnmap(:,[1]);
$ N) L' v+ U9 K8 n) n1 x" b% l
$ A/ l2 u! ^ w# m: e
ya=hnmap(:,[2]);
; N' @( [- c" q8 C/ P/ J- r
. h/ j& R* u( C
复制代码
这里对 hnmap 进行了转置,然后将经度和纬度分别存储在 xa 和 ya 中。
fp=fopen('LATLON57.txt','r');
9 J B% w" |! e% x8 e. x; ]
X! E; {' O2 c6 s! c6 z w
LL57=fscanf(fp,'%d %f %f',[3,97]);
7 u5 S5 D8 T; ^$ n1 {3 {( a
) x5 A! N( Z# W' Q% z$ I2 l7 }) M
fclose(fp);
% j' V+ N! K7 a" G# ~
* D9 I a* |7 `9 r/ Y
复制代码
这部分打开名为 'LATLON57.txt' 的文件,读取文件中的湖南省97个县的编号和经纬度数据。LL57 存储了97个县的相关信息,每一列对应一个县。文件的每一行应包含一个整数和两个浮点数。
LL57=LL57';
! i/ g: E8 I+ T8 E+ I* O
" R8 U# Q% }" t8 L+ G
x=LL57(:,[3])/10;
# V) Y7 N A* f4 q7 b
b- I5 U* C3 T8 L$ w- @
y=LL57(:,[2])/10;
复制代码
这里对 LL57 进行了转置,然后将经度和纬度分别存储在 x 和 y 中。在这里,经度和纬度都除以10,可能是由于数据单位不同而进行的缩放。
fpy=fopen('etw00100.txt','r');
o. P( J' p0 J: i
8 Z7 M N+ H' ]' H6 {& X
ymd57=fscanf(fpy,'%d',[3,1]);
* z( B; O5 e) R9 N5 y' R, g G
8 P' ^5 @9 C2 H C" I9 Y
yu97=fscanf(fpy,'%d %f %f',[3,97]);
% E2 H" L8 a7 O0 S# G
0 F6 ]+ |5 Y+ ~+ h( X; J1 F
fclose(fpy);
复制代码
这部分打开名为 'etw00100.txt' 的文件,读取文件中的湖南省97个县的温度数据。yu97 存储了97个县的温度信息,每一列对应一个县。文件的每一行应包含一个整数和两个浮点数。
yu97=yu97';
" p1 n. A0 a- \2 ~3 O! V- H
7 c) |/ I) h* V9 \
z=yu97(:,[2]);
复制代码
这里对 yu97 进行了转置,然后将温度数据存储在 z 中。
hold on;
K0 D2 N* w7 w/ U1 p7 x9 C. s0 F
! o3 {1 A. z! _3 \& ~' a. v
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));
2 O- I7 F7 Y7 `' Z H% O6 x2 A
# j1 f5 K; L ~6 V9 W
zi=griddata(x,y,z,xi,yi,'cubic');
% i9 |$ v$ a0 |9 N* W1 K
% U! c% [( P8 x& ?+ l6 i( I- Z f
复制代码
这里创建了一个网格,然后使用 griddata 进行三维数据插值,得到 zi 表示的湖南省97个县的温度分布。linspace 用于生成指定范围内的等间隔数据。
hold on;
- Y0 e1 B- o$ H. u, Q( a
; i6 e4 S7 h/ ]7 v: {; Y% o" K+ l/ b
[c,h]=contour(xi,yi,zi,'b-');
复制代码
这部分绘制等值线图,表示湖南省97个县的温度等值线。contour 用于画等值线,xi 和 yi 是插值后的网格,zi 是温度数据,'b-' 表示蓝色实线。
clabel(c,h);
, Z' F1 C, m1 P7 V
/ U( ~* b+ n5 A7 _* v5 O/ `& n
hold off;
复制代码
这里用于在等值线上标注温度值,然后通过 hold off 结束图形的绘制。
: n5 c8 R& f" N2 s
请注意,代码中有一个拼写错误,i 应该是 ;,即 hold off;i 应该为 hold off;。
, X- U) c5 v9 d0 ?7 q
" v! W2 u! v6 R9 T, _( p
) S: D( V7 w# G$ V6 _
最后结果图如下:
4 e6 v9 p! x8 ]1 G
2023-11-12 11:12 上传
下载附件
(182.96 KB)
3 C' y( Z8 m2 q( k) v
1 M, f1 y" |* x. K
具体附件代码如下:
, b0 f2 b& d* `% a' s& }
H, O6 [8 E( u h' r# V
/ h! T- W( [* K+ k+ U3 n4 B6 I
- B; A6 W$ N" D4 @6 e3 ~% d% w
" u, \4 k0 i3 ]4 V1 m' @
2 `. b% X! _- f
画等温线.rar
2023-11-12 11:13 上传
点击文件名下载附件
下载积分: 体力 -2 点
4.09 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5