网站开发背景,高端网站设计 上海,wordpress 全景,有没有可以代理推广的平台背景
在绘制站点分布图时#xff0c;有时需要采用图中图的方式#xff0c;以便于在一张图中尽可能多的表达信息。此处记录一下利用python matplotlib绘制图中图的脚本#xff0c;方便然后查询。
包含数据
该绘图脚本中包含以下数据#xff1a;
CMONOC站点分布#xff…背景
在绘制站点分布图时有时需要采用图中图的方式以便于在一张图中尽可能多的表达信息。此处记录一下利用python matplotlib绘制图中图的脚本方便然后查询。
包含数据
该绘图脚本中包含以下数据
CMONOC站点分布蓝色点CMONOC穿刺点分布灰色点某研究中采用的位于湖北省附近的一些地面跟踪站分布红色点
绘制思路
首先将CMONOC站点以及穿刺点分布画上再通过plt.axes在图上再加一块画布绘制小范围的地图接着在小范围的地图上标点。为了方便在大范围地图上找到图中图的位置也要在相应位置上用红框标记下这里采用了plt.vlines和plt.hlines两者结合的方法。
代码
注此处仅提供绘图脚本其中用到的部分站点坐标文件因一些原因不能公开。
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
import numpy as np
import os
from adjustText import adjust_text # 导入文字调整的库函数outputDir ./cmonoc_ipp/
if not os.path.exists(outputDir): # True/Falseos.mkdir(outputDir)colors_lst [blue, magenta, darkolivegreen, mediumpurple, palevioletred, cadetblue]
site_list rxxxxxxxxxxxx/ofilelst.txt # 测站名列表路径
ccl_file_dir rxxxxxxxxxxxxxxxxxxxxx/cclFileCmonoc/ # 穿刺点文件路径# 读取测站列表文件含经纬度及站点名称
f open(site_list, r)
ObsLines f.readlines()rec_name []
for i in range(len(ObsLines)):fields ObsLines[i].split()rec_name.append(fields[0])plt.figure(figsize(6, 4.5)) # 设置大小和分辨率
plt.rcParams[font.sans-serif] [arial]lat_range range(-15, 60 10, 10)
lon_range range(60, 150 10, 10)m Basemap(projectioncyl, lon_0110, lat_020, resolutionh, llcrnrlon60, urcrnrlon150,llcrnrlat-10, urcrnrlat60)
m.drawcoastlines(colorblack, linewidth0.8)
# draw parallels and meridians.
m.drawmeridians(range(70, 150 20, 20), labels[0, 0, 1, 1], colorgray, linewidth0.8, fontarial, fontsize10)
m.drawparallels(range(0, 60, 10), labels[1, 1, 0, 0], colorgray, linewidth0.8, fontarial, fontsize10)for i in range(len(rec_name)):site rec_name[i][2:6]print(Porcessing site: , site, ...)file_name site _2023_091.cclarc_file ccl_file_dir file_nameprint(Processing the file: , file_name)sec []ipp []elev []site_lst []with open(arc_file, r) as f:for line in f.readlines():line line.split()# if line[4] ! W05:# continuesec.append(int(line[2]))ipp.append([float(line[20]), float(line[21])])elev.append(float(line[5]))site_lst.append(site)lon []lat []for k in range(len(sec)):lon_tmp, lat_tmp m(ipp[k][1], ipp[k][0])lon.append(lon_tmp)lat.append(lat_tmp)plt.scatter(lon, lat, s0.0001, csilver, zorder100)# plt.plot(lon, lat, markero, colorgrey, markersize0.1, zorder100)# CMONOC坐标列表路径
listFile rE:/DoctoralStudy/2python_prog/plotSiteMap0615/sitelist/site_pos_cmonoc.txt# 读取测站列表文件含经纬度及站点名称
f open(listFile, r)
ObsLines f.readlines()lon []
lat []
staname []
for i in range(len(ObsLines)):fields ObsLines[i].split()# print(fields[0], fields[1], fields[2])lon.append(float(fields[0]))lat.append(float(fields[1]))staname.append(fields[2])lon, lat m(lon, lat)
# ----------在地图上绘制坐标点------------#
for i in range(len(staname)):# m.scatter(lon[i],# lat[i],# s20,# cred,# markero)plt.plot(lon[i], lat[i], markers, colorblue, markersize3, zorder100) # CMONOC站点# 标记图中图位置红色线
plt.vlines(108, ymin24, ymax36, colorsr, zorder100)
plt.vlines(124, ymin24, ymax36, colorsr, zorder100)
plt.hlines(24, xmin108, xmax124, colorsr, zorder100)
plt.hlines(36, xmin108, xmax124, colorsr, zorder100)# 绘制图中图
plt.axes([0.54, 0.15, 0.34, 0.28])
plt.rcParams[axes.facecolor] white
m Basemap(projectioncyl, lon_0110, lat_020, resolutionh, llcrnrlon108, urcrnrlon124, llcrnrlat24,urcrnrlat36)
m.drawcoastlines(colorgrey, linewidth0.8)
# 图中图经纬度标注受大图影响标注时打开bbox使其有白色背景增强可读性
m.drawmeridians(np.arange(100, 1244, 4), labels[0, 0, 0, 1], colorgray, linewidth0.8, fontarial,fontsize10, bboxdict(facecolorwhite, edgecolorwhite, pad0.4))
m.drawparallels(np.arange(26, 364, 4), labels[1, 0, 0, 0], colorgray, linewidth0.8, fontarial,fontsize10, bboxdict(facecolorwhite, edgecolorwhite, pad0.4))# 读取测站列表文件含经纬度及站点名称
listFile rD:/TempDataBackup/LEOData/091DataProc/site_pos_leo.txt
f open(listFile, r)
ObsLines f.readlines()lon []
lat []
staname []
for i in range(len(ObsLines)):fields ObsLines[i].split()# print(fields[0], fields[1], fields[2])lon.append(float(fields[0]))lat.append(float(fields[1]))staname.append(fields[2])lon, lat m(lon, lat)
# ----------在地图上绘制坐标点添加文字------------#
for i in range(len(staname)):# m.scatter(lon[i],# lat[i],# s20,# cred,# markero)plt.plot(lon[i], lat[i], markero, colorred, markersize5, zorder100)
# 此处可以直接使用 m.scatter(lon,lat)# ---------在坐标点添加文字------#
texts []
for i in range(len(staname)):texts.append(plt.text(lon[i], # 坐标lat[i],staname[i], # 文字字符串fontarial,fontsize10,styleitalic,weightnormal,verticalalignmentcenter,horizontalalignmentright,rotation0, zorder100)) # 给散点加标签
adjust_text(texts, only_move{text: xy},)fig_name outputDir cmonoc091IPPTrack.tif
plt.savefig(fig_name, dpi600, bbox_inchestight, pad_inches0.1) # 输出地图并设置边框空白紧密
plt.show() # 将图像显示出来
最后成图